二叉树的遍历

前序遍历

给出一棵二叉树,返回其节点值的前序遍历。

样例

给出一棵二叉树 {1,#,2,3},

   1
    \
     2
    /
   3

 返回 [1,2,3].

class Solution:
    """
    @param: root: A Tree
    @return: Preorder in ArrayList which contains node values.
    """
    def preorderTraversal(self, root):
        # write your code here
        self.result = [] 
        self.traverse(root)
        return self.result
    
    def traverse(self,root):
        if not root:
            return
        self.result.append(root.val)
        self.traverse(root.left)
        self.traverse(root.right)

中序遍历与后序遍历类似,修改traverse函数中root left right 的先后顺序即可。

 

层次遍历

给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)

样例

给一棵二叉树 {3,9,20,#,#,15,7} :

  3
 / \
9  20
  /  \
 15   7

返回他的分层遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

class Solution:
    """
    @param: root: A Tree
    @return: Level order a list of lists of integer
    """
    def levelOrder(self, root):
        # write your code here
        self.result = []
        if not root:
            return self.result
            
        q = [root]
        while q:
            new_q = []
            self.result.append([n.val for n in q])
            for node in q:
                if node.left:
                    new_q.append(node.left)
                if node.right:
                    new_q.append(node.right)
            q = new_q
        return self.result

 

posted @ 2017-12-27 16:24  Tom_NCU  阅读(73)  评论(0编辑  收藏  举报