在java中迭代地销毁二叉树

时间:2016-12-30 15:23:08

标签: java algorithm binary-tree destroy

该任务通常在递归的订单遍历期间完成,并且在线的示例很少。其中一个是here,但我想知道它是否正确,因为似乎_deleteTree()方法只执行BFS并且不对节点执行任何操作,并且通过简单地设置根来完成删除树的结果为null。毫无疑问,它将返回一棵空树。但是它是删除对所有树节点的引用的正确方法吗?

此外,对于迭代后订单遍历,例如,如下所示

public TreeNode postorderTraversal(TreeNode root) {
    if(root==null) return null;
    Stack<TreeNode> stack1=new Stack<>();
    Stack<TreeNode> stack2=new Stack<>();
    TreeNode cur=root;
    stack1.push(cur);
    while(!stack1.isEmpty()){
        cur=stack1.pop();

        if(cur!=null){
            stack2.push(cur);
        }

        if(cur.left!=null){
            stack1.push(cur.left);
        }
        if(cur.right!=null){
            stack1.push(cur.right);
        }
    }

    while(!stack2.isEmpty()){
        //elements poped will be in post order sequence
        }
    return root;
}

如何迭代销毁二叉树?有人可以提供示例代码(java)吗?谢谢!

2 个答案:

答案 0 :(得分:0)

通常,当您将节点指定为null时,技术上会删除所有数据。与链接列表一样,当您通过将其“下一个”设置为null来断开其连接时,您将删除该列表,并且Java垃圾收集器将处理其余的事务。因此,在链接的Java代码中,一旦确定root没有子节点,它们就会做同样的事情。

答案 1 :(得分:0)

这是一个更好的解决方案,它使用树节点本身来存储队列。像这样:

scala> MyClass(1, 2).unzip
<console>:14: error: Cannot prove that Int <:< (A1, A2).
       MyClass(1, 2).unzip
                     ^