【问题标题】:How to find all subtrees, given a Linked binary tree in java, or even a regular binary tree?给定java中的链接二叉树,甚至是常规二叉树,如何找到所有子树?
【发布时间】:2014-10-18 05:05:14
【问题描述】:

我遇到了一个面试问题,要求我创建一种方法来查找二叉树中的所有子树。我想不通,我该如何回答这个问题?有没有一种简单的方法可以使用递归来实现这一点?我应该遍历列表吗? 非常感谢任何建议!

目前我只写了一个通用节点类:

public class Node<Object> 
{
    private Object data ;
    private Node<Object> left ; 
    private Node<Object> right ; 


    public Node()
    {
        this(null,null,null) ; 
    }        


    public Node(Object D, Node<Object> L, Node<Object> R)
    {
        data = D ;
        left = L ; 
        right = R ; 
    }


    public Object getData()
    {
        return data ; 
    }        


    public void setData(Object d)
    {
        data = d ; 
    }        


    public Node<Object> getLeft() 
    {
        return left ; 
    }        

   public Node<Object> getRight()
    {
        return right ; 
    }   

    public void setLeft(Node node)
    {
        left = node ; 
    }



    public void setRight(Node node)
    {
        right = node ; 
    }        
}

非常感谢任何建议!

【问题讨论】:

    标签: java tree binary-tree subtree


    【解决方案1】:

    很大程度上取决于“找到”子树的含义。每个节点都有一个根,因此简单地识别或计数它们就等于找到所有节点。您选择的树的深度优先或广度优先遍历应该足够了。

    如果“找到”子树意味着对它或对它进行特定的操作,那么这可能会使这两种遍历策略中的一种比另一种更合适。

    【讨论】:

    • 感谢您的建议,我要做的基本上是给定一棵二叉树,我想返回该树中的所有子树
    • 例如我有:26 / \ 10 3 / \ \ 4 6 3 \ 30。所以它会返回 (26,10, 3) 和 (10,4,6) 等...抱歉布局我在编辑此评论时遇到问题
    • 您所描述的不是传统意义上的“子树”,但这实际上并没有改变我的答案。您只需遍历树 - 您选择深度优先或广度优先 - 并收集以每个节点为根的子树(如果有)。我不会为你编写代码,因为这会破坏你的老师布置这个作业的目的。
    猜你喜欢
    • 1970-01-01
    • 2011-03-10
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多