C++二叉树遍历中序、先序和后序
C++ Binary Tree Traversal Inorder, Preorder and Postorder
我目前正在做一个 C++ 项目,其中一部分是使用中序、前序和后序遍历二叉树。
class TNode
{
public:
int val;
TNode() {}
TNode(int v) { val = v; }
TNode * left;
TNode * right;
TNode * parent;
};
class BTree
{
void print_pre_order(TNode *r);// print the node as you traverse according to the order.
void print_in_order();
void print_post_order();
}
BTree::BTree()
{
root = new TNode(1);
root->parent = 0;
root->left = new TNode(2);
root->right = new TNode(3);
root->left->left = new TNode(4);
root->left->right = new TNode (5);
root->right->left = new TNode(6);
}
void BTree::print_pre_order(TNode *r)
{
if (r == 0)
{
return;
}
cout << r->val;
print_pre_order(r->left);
print_pre_order(r->right);
}
int main()
{
BTree y;
y.print_pre_order(y.root);
return 0;
}
在我的默认构造函数中,我已经为一些节点初始化了值,但是当我 运行 代码时,我得到的输出是“124”并且出现错误。我不知道我哪里做错了,有人可以帮忙吗?
我没有看到任何迹象表明该程序曾将任何指针设置为零,因此 if (r == 0)
不太可能触发退出。
试一试:
class TNode
{
public:
int val;
TNode(): val(0), left(nullptr), right(nullptr), parent(nullptr) {}
TNode(int v): val(v), left(nullptr), right(nullptr), parent(nullptr) {}
TNode * left;
TNode * right;
TNode * parent;
};
:
告诉编译器 member initializer list 即将到来。之后,代码将所有指针成员初始化为指向 null。
更改
if (r == 0)
到
if (r == nullptr)
为了更好地传达意图,您应该可以开始了。
我目前正在做一个 C++ 项目,其中一部分是使用中序、前序和后序遍历二叉树。
class TNode
{
public:
int val;
TNode() {}
TNode(int v) { val = v; }
TNode * left;
TNode * right;
TNode * parent;
};
class BTree
{
void print_pre_order(TNode *r);// print the node as you traverse according to the order.
void print_in_order();
void print_post_order();
}
BTree::BTree()
{
root = new TNode(1);
root->parent = 0;
root->left = new TNode(2);
root->right = new TNode(3);
root->left->left = new TNode(4);
root->left->right = new TNode (5);
root->right->left = new TNode(6);
}
void BTree::print_pre_order(TNode *r)
{
if (r == 0)
{
return;
}
cout << r->val;
print_pre_order(r->left);
print_pre_order(r->right);
}
int main()
{
BTree y;
y.print_pre_order(y.root);
return 0;
}
在我的默认构造函数中,我已经为一些节点初始化了值,但是当我 运行 代码时,我得到的输出是“124”并且出现错误。我不知道我哪里做错了,有人可以帮忙吗?
我没有看到任何迹象表明该程序曾将任何指针设置为零,因此 if (r == 0)
不太可能触发退出。
试一试:
class TNode
{
public:
int val;
TNode(): val(0), left(nullptr), right(nullptr), parent(nullptr) {}
TNode(int v): val(v), left(nullptr), right(nullptr), parent(nullptr) {}
TNode * left;
TNode * right;
TNode * parent;
};
:
告诉编译器 member initializer list 即将到来。之后,代码将所有指针成员初始化为指向 null。
更改
if (r == 0)
到
if (r == nullptr)
为了更好地传达意图,您应该可以开始了。