在java中迭代销毁二叉树
该任务通常在递归后序遍历期间完成,并且很少有在线示例。其中一个是,但我想知道它是否正确,因为_deleteTree()方法似乎只执行BFS操作,不对节点执行任何操作,而删除是通过简单地将树的根设置为null来完成的。毫无疑问,它将返回一棵空树。但是,删除对所有树节点的引用是否正确 同样,对于迭代的后序遍历,比如说,如下所示在java中迭代销毁二叉树,java,algorithm,binary-tree,destroy,Java,Algorithm,Binary Tree,Destroy,该任务通常在递归后序遍历期间完成,并且很少有在线示例。其中一个是,但我想知道它是否正确,因为_deleteTree()方法似乎只执行BFS操作,不对节点执行任何操作,而删除是通过简单地将树的根设置为null来完成的。毫无疑问,它将返回一棵空树。但是,删除对所有树节点的引用是否正确 同样,对于迭代的后序遍历,比如说,如下所示 public TreeNode postorderTraversal(TreeNode root) { if(root==null) return 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;
}
公共TreeNode postorderTraversal(TreeNode根目录){
if(root==null)返回null;
Stack stack1=新堆栈();
Stack stack2=新堆栈();
TreeNode cur=根;
堆栈1.推送(cur);
而(!stack1.isEmpty()){
cur=stack1.pop();
如果(cur!=null){
堆栈2.推送(cur);
}
if(当前左侧!=null){
堆栈1.推送(当前左侧);
}
if(当前右侧!=null){
堆栈1.推送(当前右侧);
}
}
而(!stack2.isEmpty()){
//poped元素将按后顺序排列
}
返回根;
}
如何迭代销毁二叉树?有人能给出一个示例代码(java)吗?谢谢 通常,当您将一个节点指定为null时,您会从技术上删除所有数据。与链表一样,当您通过将其“next”per say设置为null来断开其连接时,您将删除该列表,而java垃圾收集器将处理其余部分。因此,在您链接的Java代码中,一旦确定根目录没有子目录,它们就会执行相同的操作 有一个更好的解决方案,它使用树节点本身来存储队列。大概是这样的:
static void clear(Node root) {
while (root != null) {
Node left = root.left;
if (left == null) {
Node right = root.right;
root.right = null;
root = right;
} else {
// Rotate the left child up.
root.left = left.right;
left.right = root;
root = left;
}
}
}
您链接到的代码具有误导性。看起来有人已经在C++中尝试了爪哇的“逐字”重写。
deleteTree
概念根本不适用于Java。正如您所指出的,该方法的Java版本实际上没有做任何事情。