理解树遍历的递归

时间:2014-10-26 02:56:00

标签: python recursion

我试图了解递归的工作原理以及遍历二叉树的工作方式。

好的,据我所知,递归就是在其中调用一个函数。有点像循环。

现在,我获得了如何在二叉树上进行 postOrder 遍历的代码。

(注意这不是我的代码,我只是想通过这段代码了解递归是如何工作的)

 # Definition for a  binary tree node
 # class TreeNode:
 #     def __init__(self, x):
 #         self.val = x
 #         self.left = None
 #         self.right = None

 class Solution:
     # @param root, a tree node
     # @return a list of integers

 def postorderTraversal(self, root):
    solution = []
    self.postorderTraversalRec(root, solution)
    return solution

 def postorderTraversalRec(self, root, solution):
    if root == None:
        return
    self.postorderTraversalRec(root.left, solution)
    self.postorderTraversalRec(root.right, solution)
    solution.append(root.val)

现在根据我的理解 PostOrder 遍历右 - 左 - 中,所以孩子先是父母。

以下是我认为正在进行递归的两行。

    self.postorderTraversalRec(root.left, solution)
    self.postorderTraversalRec(root.right, solution)

从我可以理解的是,第一行告诉程序以递归方式遍历所有左节点,直到它到达结尾。然后它告诉程序通过所有左手节点直到它结束。

但我遇到的问题是,我无法理解这是如何进行 PostOrder 遍历的。对我而言,它看起来像 PreOrder 遍历。

1 个答案:

答案 0 :(得分:2)

Post-order traversal如下:

  1. 遍历左子树。
  2. 遍历正确的子树。
  3. 访问root。
  4. 这正是这里发生的事情。对于任何给定节点(root),首先访问左子树(root.left),然后访问右子树(root.right),然后访问节点本身(root.val })。

    " pre"或"发布"遍历类型的一部分是指在访问子节点(前),后(后)或甚至访问每个子节点(有序遍历)之前访问当前节点的值的时间。在示例代码中,遍历子节点后将访问当前节点的值。所以,它是在订单后的遍历。