繁体   English   中英

谁能解释二叉树遍历的递归代码?

[英]can anyone Explain recursive code for binary tree traversal?

使用递归对二叉树进行中序遍历。

任何人都可以解释这些递归调用如何在这里工作。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        ArrayList<Integer> inorder=new ArrayList<>();
        result(root,inorder);
        return inorder;
    }
    void result(TreeNode root,ArrayList<Integer> inorder){
        if (root==null){
            return ;
        }
        result(root.left,inorder);
        inorder.add(root.val);
        result(root.right,inorder);
    }
}

我无法理解递归是如何工作的。

试试 map 把它写出来。 基本上是这样的:对于每个节点,您将左子树的所有节点添加到列表中,然后是节点,然后是右子树的所有节点。 如果对节点进行排序,使得左侧节点的值都小于形成(子)树根的节点的值,而右侧节点的值都大于形成(子)树根的节点,则列表将被排序。

我会帮你举个例子。

让我们假设以下树:

         5
     /      \
    3        7
   / \      / \
  1   4    6   8
   \            \  
    2            9

现在遍历从根 (5) 开始并执行以下操作:

  • go 留给 3(递归调用 #1)
  • go 留给 1(递归调用 #2)
  • 加 1
  • 从 1 go 到 2(递归调用#3)
  • 加 2
  • 回到 1(调用 #3 返回)
  • 回到 3(调用 #2 返回)
  • 加 3
  • go 右转 4(递归调用#4)
  • 加 4
  • 回到 3(调用 #4 返回)
  • 回到 5(调用 #1 返回)
  • 加 5
  • go 对 7(递归调用#5)
  • ...(我会让你 map 剩下的)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM