簡體   English   中英

如何獲取樹的所有葉節點?

[英]How to get all leaf nodes of a tree?

假設我在樹中有一個節點,如何獲取其祖先是該節點的所有葉節點? 我已經像這樣定義了 TreeNode:

public class TreeNode<T>
{
    /** all children of the node */
    private List<TreeNode<T>> children = new ArrayList<TreeNode<T>>();
    /** the parent of the node, if the node is root, parent = null */
    private TreeNode<T> parent = null;
    /** the stored data of the node */
    private T data = null;

    /** the method I want to implement */
    public Set<TreeNode<T>> getAllLeafNodes()
    {
        Set<TreeNode<T>> leafNodes = new HashSet<TreeNode<T>>();
        return leafNodes;
    }
}

使用遞歸。

  • 如果節點本身是葉子,則返回它
  • 否則,返回其子節點的所有葉節點

像這樣的東西(未測試):

public Set<TreeNode<T>> getAllLeafNodes() {
    Set<TreeNode<T>> leafNodes = new HashSet<TreeNode<T>>();
    if (this.children.isEmpty()) {
        leafNodes.add(this);
    } else {
        for (TreeNode<T> child : this.children) {
            leafNodes.addAll(child.getAllLeafNodes());
        }
    }
    return leafNodes;
}

創建堆棧並推送根節點。

Stack<Node> st = new Stack<>();
st.push(root);      
CL(st.peek());

調用遞歸方法。

public void CL(Node root){
        if (st.peek().left == null && st.peek().right == null ) {//if leaf node
            System.out.println(st.peek().data);//print
            st.pop();
            return;
        }
        else{
            if(st.peek().left != null){
                st.add(st.peek().left);
                CL(st.peek());
            }
            if(st.peek().right != null){
                st.add(st.peek().right);
                CL(st.peek());
            }
        }
        st.pop();
    }

暫無
暫無

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

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