该任务通常在递归的订单遍历期间完成,并且在线的示例很少。其中一个是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)吗?谢谢!
答案 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
^