gpt4 book ai didi

java - 二叉搜索树,inorder 方法迭代不起作用

转载 作者:搜寻专家 更新时间:2023-11-01 01:50:41 25 4
gpt4 key购买 nike

我目前正在大学学习数据结构类(class),我们正在学习使用链表的二叉搜索树。我们已经递归地检查了 inOrder 方法,但我想尝试迭代地执行该方法。经过一些研究,我意识到我必须在遍历树时使用堆栈。我能够到达树最左侧的尽头,但是向后遍历树是我遇到麻烦的地方。我已经尝试了我的代码的各种版本,但我总是以 nil 指针异常结束,或者打印顺序不正确。

public void inOrder(){                
// implement this method using non-recursive solution
if(m_root==null){
return;
}
Stack<BSTNode> myStack= new Stack<BSTNode>();
BSTNode current=m_root;
while (current!= null){
myStack.push(current);
current=current.getLeft();
}
while (current!=null&& !myStack.isEmpty()){
current=myStack.peek();
System.out.print(current.getInfo()+" ");
myStack.pop();
if(current.getRight()!=null){
myStack.push(current);
}

}

}

最佳答案

据我所知,您的代码在第二个 while 循环中存在一些问题。您的想法是正确的,但是存在一些逻辑错误。你的条件是对的,但不应该在一起,应该分开。下面的代码实现了你正在寻找的东西。

public void inOrder(){                
// implement this method using non-recursive solution
if(m_root==null){
return;
}
Stack<BSTNode> myStack= new Stack<BSTNode>();
BSTNode current=m_root;
while (current!= null){
myStack.push(current);
current=current.getLeft();
}
while (!myStack.isEmpty()){
current=(BSTNode)myStack.pop();
System.out.print(current.getInfo()+" ");
if(current.getRight() != null){
current=current.getRight();
while (current!= null){
myStack.push(current);
current=current.getLeft();
}
}
}

}

关于java - 二叉搜索树,inorder 方法迭代不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34150685/

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