簡體   English   中英

遍歷Java中二叉樹的所有節點

[英]Traversing through all nodes of a binary tree in Java

假設我有一個簡單的二叉樹節點類,如下所示:

public class BinaryTreeNode {
    public String identifier = "";
    public BinaryTreeNode parent = null;
    public BinaryTreeNode left = null;
    public BinaryTreeNode right = null;

    public BinaryTreeNode(BinaryTreeNode parent, String identifier)
    {
        this.parent = parent; //passing null makes this the root node
        this.identifier = identifier;
    }

    public boolean IsRoot() {
        return parent == null;
    }
}

我如何添加一個能夠以遞歸方式遍歷任何大小樹的方法,從左到右訪問每個現有節點, 而無需重新訪問已遍歷的節點?

這會有用嗎?:

public void traverseFrom(BinaryTreeNode rootNode)
{
    /* insert code dealing with this node here */

    if(rootNode.left != null)
        rootNode.left.traverseFrom(rootNode.left);

    if(rootNode.right != null)
        rootNode.traverseFrom(rootNode.right);
}

您可以實現三種類型的二叉樹遍歷:

例:

考慮以下二叉樹:

在此輸入圖像描述

Pre-order traversal sequence: F, B, A, D, C, E, G, I, H (root, left, right)
In-order traversal sequence: A, B, C, D, E, F, G, H ,I (left, root, right)
Post-order traversal sequence: A, C, E, D, B, H, I, G, F (left, right, root)

代碼示例:

從二進制樹的左到右遍歷,nay為了遍歷二叉樹:

public void traverse (Node root){ // Each child of a tree is a root of its subtree.
    if (root.left != null){
        traverse (root.left);
    }
    System.out.println(root.data);
    if (root.right != null){
        traverse (root.right);
    }
}

codeMan是對的。 遍歷將訪問左側的每個節點。 一旦它到達左側的最后一個節點,它就會開始沿着右側節點返回。 這是深度優先搜索(DFS)遍歷。 因此,每個節點僅被訪問一次,並且算法在O(n)時間內運行。 快樂的編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM