gpt4 book ai didi

java - 使用堆栈的二叉搜索树的中序树遍历算法

转载 作者:行者123 更新时间:2023-11-29 09:44:41 24 4
gpt4 key购买 nike

我的输入结果 24, 4, 2, 3, 9, 10, 32 ,我得到以下结果 2, 3, 4, 24 .

我正在使用堆栈。当我手动检查这个程序时,节点没有通过 else if在堆栈上的 4,即使有右子树。

public void inorderNonRcursive(Node root){

Stack s = new Stack();
Node node = root;
Node k;
int c=0;

if(node != null) {
s.push(node);
}

while(!s.stack.isEmpty()) {

//node=(Node) s.stack.get(s.stack.size()-1);
System.out.println("first condition" + (node.getleft() != null && (node.getVisited() == false)) + "second condi" + (node.getRight() != null));

if(node.getleft() != null && (node.getVisited() == false)) {
node = node.getleft();
s.push(node);
System.out.println(" from 1 "+(++c));

} else if(node.getRight() != null) {
k = s.pop();
System.out.println(k.getvalue());
node=node.getRight();
s.push(node);
System.out.println(" from 2 "+(++c));

} else {
k = s.pop();
System.out.println(k.getvalue());
System.out.println(" from 3 "+(++c));
}

}

}

最佳答案

对我来说,设计中有两个问题:

  1. 该算法似乎是适用于迭代的递归算法,并且
  2. Node 类知道被访问。

这是一个不同的解决方案(您需要稍微调整一下):

// Inorder traversal:
// Keep the nodes in the path that are waiting to be visited
Stack s = new Stack();
// The first node to be visited is the leftmost
Node node = root;
while (node != null)
{
s.push(node);
node = node.left;
}
// Traverse the tree
while (s.size() > 0)
{
// Visit the top node
node = (Node)s.pop();
System.out.println((String)node.data);
// Find the next node
if (node.right != null)
{
node = node.right;
// The next node to be visited is the leftmost
while (node != null)
{
s.push(node);
node = node.left;
}
}
}

回到我的第一条评论,您没有说您编写了伪代码并对其进行了测试。我认为这是编写新算法的关键一步。

关于java - 使用堆栈的二叉搜索树的中序树遍历算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com