【问题标题】:Delete Binary Tree - Suggestions on Design删除二叉树 - 设计建议
【发布时间】:2012-08-08 14:06:26
【问题描述】:

我写了一个删除树的所有元素的代码。 需要以下建议:

  1. reverseTreeStack方法中,是否可以不使用stack方法参数进行设计?
  2. 我可以用一种更好的设计方法设计整个代码吗?

更新:将 reverseTreeStack 的返回类型更改为 void。删除了堆栈的附加变量。

    public class DeleteTree {

    public static void deleteTree(BinaryTreeNode root)
    {       
        Stack stack = new Stack();
        reverseTreeStack(stack, root);
        while (!stack.isEmpty())
        {
            BinaryTreeNode node = (BinaryTreeNode)stack.pop();
            System.out.println("---------Deleting----------->" + node.getData());
            node = null;
        }
    }

    public static void reverseTreeStack(Stack stack,BinaryTreeNode root)
    {
        if (root != null)
        {
            stack.push(root);   
            reverseTreeStack(stack,root.getLeft());
            reverseTreeStack(stack, root.getRight());
        }
    }
}

【问题讨论】:

  • 家庭作业?如果是,请标记它。

标签: java recursion tree binary-tree


【解决方案1】:

为什么需要这样做?如果我没记错的话,一旦没有可用的资源引用,JVM 就可以释放资源,因此只需将根节点设置为 null 即可释放整个树。

【讨论】:

  • 这是一个经典的数据结构/算法问题。所以正在努力。感谢分享链接。
【解决方案2】:

我认为,James 是对的,但如果你想练习树遍历,或者如果你想用一种需要手动释放内存的语言来实现它,那么请使用递归:

void deleteTree(TreeNode node)
{
    if(node==null)return;

    deleteTree(node.getLeft());
    deleteTree(node.getRight());

    System.out.printline("Deleting: "+node.getData())
    node = null;
}

还可以看看Postorder Traversal(这是唯一一个,可以删除)

【讨论】:

  • 是的,我想实现树遍历,所以问了这个问题
【解决方案3】:

1) 我认为您可以在直接操作堆栈时杀死返回值并使其成为 void 方法。所以就做吧

 Stack stack = new Stack();
 reverseTreeStack(stack, root);

 // Now just use stack

2) 不要把事情浓缩成一种方法。将事物分解为更多方法将使您的代码更易于导航和理解。每个函数负责的越少,阅读它的人就越有意义。

【讨论】:

  • 谢谢杰夫。你的建议是有道理的。
【解决方案4】:

如果你的树太大,你的reverseTreeStack 方法可能会给你一个StackOverflowError,所以使用循环而不是递归可能是更好的选择(除非你知道你的树永远不会这么大)。

另外,你为什么要“删除”每个节点? (node = null 实际上只是删除了您在该方法中的引用...)如果您以经典的 Node(parent, leftChild , rightChild) 并且不在其他任何地方存储指向节点的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-08
    • 2017-07-28
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多