Java 基于堆栈的二叉搜索树的有序树遍历算法
我的输入结果是Java 基于堆栈的二叉搜索树的有序树遍历算法,java,stack,binary-search-tree,inorder,Java,Stack,Binary Search Tree,Inorder,我的输入结果是24,4,2,3,9,10,32,我得到以下结果2,3,4,24 我正在使用堆栈。当我手动检查该程序时,该节点不会通过堆栈上4的else if,即使它有正确的子树 public void inorderNonRcursive(Node root){ Stack s = new Stack(); Node node = root; Node k; int c=0; if(node != null) { s.push(node
24,4,2,3,9,10,32
,我得到以下结果2,3,4,24
我正在使用堆栈。当我手动检查该程序时,该节点不会通过堆栈上4的else if
,即使它有正确的子树
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));
}
}
}
这看起来像是一个课堂练习,旨在帮助您理解二叉树 在编写任何代码之前,先绘制一张树的图片,每个节点上都有一个值,如“a”、“B”、“C”等。然后从根节点开始,查看需要执行哪些操作才能按顺序访问每个节点。用伪代码编写您所学的内容,并按照它所说的内容进行测试。确保测试每个节点可以想到的所有不同情况(至少应该有三个)。在树中放置大约七个节点 现在可以开始编写代码了。键入伪代码作为注释,然后在每个注释之间插入Java代码
享受:-)这看起来像是一个课堂练习,旨在帮助您理解二叉树 在编写任何代码之前,先绘制一张树的图片,每个节点上都有一个值,如“a”、“B”、“C”等。然后从根节点开始,查看需要执行哪些操作才能按顺序访问每个节点。用伪代码编写您所学的内容,并按照它所说的内容进行测试。确保测试每个节点可以想到的所有不同情况(至少应该有三个)。在树中放置大约七个节点 现在可以开始编写代码了。键入伪代码作为注释,然后在每个注释之间插入Java代码
享受:-)对我来说,设计中有两个问题:
节点
类知道被访问的情况李>
这里有一个不同的解决方案(您需要稍微调整):
回到我的第一条评论,您不会说您编写了伪代码并对其进行了测试。我认为这是编写新算法的关键一步 对我来说,设计中有两个问题:
节点
类知道被访问的情况李>
这里有一个不同的解决方案(您需要稍微调整):
回到我的第一条评论,您不会说您编写了伪代码并对其进行了测试。我认为这是编写新算法的关键一步 你能发布你的
节点
类的代码吗?你能发布你的节点
类的代码吗?谢谢你的建议,但这不是xlass练习,我已经用节点圈和一步一步地通过测试了,我还打印了每一次迭代的条件,以了解实际发生的情况。实际问题是,对于4个节点,我有一个正确的节点9,即使它有一个正确的节点,但它不接受第二个条件,即我检查的正确节点为true。在我开始这项工作之前,我还实施了累进法,这给了我完美的答案。谢谢你的建议,但这不是xlass练习,我已经使用节点圆和一步一步地通过测试了它,我还打印了每一次迭代的条件,以了解实际发生的情况。实际问题是我有一个右节点9表示4节点,即使它有一个右节点,但它不接受第二个条件,即我正在检查右节点是否为true。在我开始这项工作之前,我还实施了接收方法,这给了我完美的答案。
// 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;
}
}
}