簡體   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