【发布时间】:2016-12-30 15:23:07
【问题描述】:
该任务一般在递归后序遍历时完成,网上的例子很少。其中之一是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)吗?谢谢!
【问题讨论】:
-
您链接到的代码具有误导性。看起来有人拿了 C++ 的例子,并试图用 Java “逐字”重写它。
deleteTree概念根本不适用于 Java。正如您所指出的,该方法的 Java 版本实际上并没有做任何事情。
标签: java algorithm binary-tree destroy