博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode每天一题】Binary Tree Inorder Traversal(二叉树的中序遍历)
阅读量:7032 次
发布时间:2019-06-28

本文共 1796 字,大约阅读时间需要 5 分钟。

Given a binary tree, return the inorder traversal of its nodes' values.

Example:

Input: [1,null,2,3]   1    \     2    /   3Output: [1,3,2]

Follow up: Recursive solution is trivial, could you do it iteratively?

 

思路


  这道题考察的是二叉树的中序遍历,中序遍历的解法有两种,一种是使用递归,一种是使用循环来解决。下面附上两种解法的代码。

解决代码


  递归解决代码 

1 # Definition for a binary tree node. 2 # class TreeNode(object): 3 #     def __init__(self, x): 4 #         self.val = x 5 #         self.left = None 6 #         self.right = None 7  8 class Solution(object): 9     def inorderTraversal(self, root):10         """11         :type root: TreeNode12         :rtype: List[int]13         """14         if not root:   # 空节点直接返回15             return []16         res  =[]17         self.indorder(root, res)     # 中序遍历18         return res19     20     def indorder(self, root, res):    # 中序遍历函数21         if not root:22             return23         24         self.indorder(root.left, res)25         res.append(root.val)26         self.indorder(root.right, res)

 

  循环解决代码(循环主要是使用栈来解决)

1 # Definition for a binary tree node. 2 # class TreeNode(object): 3 #     def __init__(self, x): 4 #         self.val = x 5 #         self.left = None 6 #         self.right = None 7  8 class Solution(object): 9     def inorderTraversal(self, root):   14         if not root:15             return []16         res = []      #   记录结果列表17         stack = []18         while stack or root:    # 循环条件19             if root:               # 中序遍历,需要先将左边节点遍历完毕。20                 stack.append(root)21                 root = root.left22             else:                # 意味左节点为空,这时进行弹出。并遍历弹出节点的右子树。23                 root = stack.pop()24                 res.append(root.val)25                 root = root.right26         return res

 

转载于:https://www.cnblogs.com/GoodRnne/p/10834398.html

你可能感兴趣的文章