【LeetCode】Binary Tree Preorder Traversal

Posted on 2015-05-09 19:39  Maples7  阅读(166)  评论(0编辑  收藏  举报

Binary Tree Preorder Traversal

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

For example:
Given binary tree {1,#,2,3},

   1
    \
     2
    /
   3

return [1,2,3].

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

 


 

 

Solution:

递归解法很简单:

 1 # Definition for a binary tree node.
 2 # class TreeNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.left = None
 6 #         self.right = None
 7 
 8 class Solution:
 9     # @param {TreeNode} root
10     # @return {integer[]}
11     def preorderTraversal(self, root):
12         if root == None:
13             return []
14         else:
15             return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)

迭代版本也是常规的将递归改成迭代的版本:

用一个栈来模拟递归的过程,注意栈 FILO 的特点。所以,对于当前根,要把右子树先加入栈,然后再把左子树加入栈。

前序遍历的顺序是:根 - 左子树 - 右子树。

代码如下:

 1 # Definition for a binary tree node.
 2 # class TreeNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.left = None
 6 #         self.right = None
 7 
 8 class Solution:
 9     # @param {TreeNode} root
10     # @return {integer[]}
11     def preorderTraversal(self, root):
12         stack = []
13         path = []
14         if root != None:
15             stack.append(root)
16         while stack != []:
17             e = stack.pop()
18             path.append(e.val)
19             if e.right != None:
20                 stack.append(e.right)
21             if e.left != None:
22                 stack.append(e.left)
23         return path