C++中的二叉搜索树遍历
下面是我的二进制搜索树的实现 看看打印功能 根据我的理解,我已经实现了顺序遍历。我说得对吗C++中的二叉搜索树遍历,c++,binary-search-tree,tree-traversal,C++,Binary Search Tree,Tree Traversal,下面是我的二进制搜索树的实现 看看打印功能 根据我的理解,我已经实现了顺序遍历。我说得对吗 其次,我如何修改print以实现预订单和后订单遍历?在您的脑海中,逐步完成该函数的前几行。是否清楚打印的第一个树节点始终是根节点?这与顺序遍历不同。您实现的是预顺序。唯一的区别是std:的位置:cout@MadKarel,将左侧和右侧子项推到堆栈的顺序重要吗?@DrewDormann,将左侧和右侧子项推到堆栈的顺序重要吗?您是否难以找到该问题的答案?这似乎很容易测试,所以我不知道你为什么要问它。 #inc
其次,我如何修改print以实现预订单和后订单遍历?在您的脑海中,逐步完成该函数的前几行。是否清楚打印的第一个树节点始终是根节点?这与顺序遍历不同。您实现的是预顺序。唯一的区别是std:的位置:cout@MadKarel,将左侧和右侧子项推到堆栈的顺序重要吗?@DrewDormann,将左侧和右侧子项推到堆栈的顺序重要吗?您是否难以找到该问题的答案?这似乎很容易测试,所以我不知道你为什么要问它。
#include <iostream>
#include "Stack.hpp"
namespace binary_search_tree_no_recursion_namespace
{
struct Node
{
int data;
Node * nextLeft;
Node * nextRight;
};
class BinarySearchTree
{
private:
linked_stack_namespace::Stack<Node*> stack;
Node * root;
public:
BinarySearchTree(): root(nullptr){}
void add_node(int value)
{
Node * newNode = new Node();
newNode->data = value;
newNode->nextLeft = nullptr;
newNode->nextRight = nullptr;
Node * copyOfRoot = root;
if(copyOfRoot == nullptr)
{
root = newNode;
}
else
{
while (copyOfRoot != nullptr)
{
if (copyOfRoot->data > value)
{
if (copyOfRoot->nextLeft == nullptr)
{
copyOfRoot->nextLeft = newNode;
break;
}
else
{
copyOfRoot = copyOfRoot->nextLeft;
}
}
if (copyOfRoot->data <= value)
{
if (copyOfRoot->nextRight == nullptr)
{
copyOfRoot->nextRight = newNode;
break;
}
else
{
copyOfRoot = copyOfRoot->nextRight;
}
}
}
}
}
void print()
{
stack.push(root);
while(!stack.is_empty())
{
Node * poppedNode = stack.pop();
std::cout<<poppedNode->data;
if(poppedNode->nextRight != nullptr)
{
stack.push(poppedNode->nextRight);
}
if(poppedNode->nextLeft != nullptr)
{
stack.push(poppedNode->nextLeft);
}
}
}
public:
static void Test()
{
BinarySearchTree tree;
tree.add_node(5);
tree.add_node(4);
tree.add_node(6);
tree.add_node(2);
tree.add_node(1);
tree.add_node(3);
tree.print();
}
};
}