Given a binary tree, return the inorder traversal of its nodes’ values.
For example:
Given binary tree [1,null,2,3]
,
return [1,3,2]
.
思路
题目要求我们中序遍历一棵树。依照题意,应当先访问左子树,之后访问根,最后访问右子树。
利用递归实现起来很容易,利用深度优先遍历(DFS)即可实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution(object): def inorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ res = [] if (root): self.DFS(root,res) return res def DFS(self, root, res): if (root.left): self.DFS(root.left, res) res.append(root.val) if (root.right): self.DFS(root.right, res)
|
题目又提出了进一步的要求,需要我们使用迭代的方法来解决问题。
一般来说,深度优先的操作可以转换为栈的操作。我们发现不仅需要用栈,还需要利用一个能存访问过节点的数据结构才行,不然就会无限循环访问左子树,无法跳出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| class Solution(object): def inorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ stack = [] res = [] visit = {} if (root): stack.append(root) while(len(stack)): while (stack[-1].left and not visit.has_key(stack[-1].left)): stack.append(stack[-1].left) cur = stack.pop() res.append(cur.val) visit[cur] = 0 if (cur.right): stack.append(cur.right) return res
|