C++;按序、前序和后序遍历二叉树 我目前正在研究一个C++项目,其中的一部分是用顺序、预序和后序遍历二叉树。p> 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; } 类TNode { 公众: int-val; TNode(){} TNode(intv){val=v;} t节点*左; TNode*对; TNode*父节点; }; B类树 { void print_pre_order(TNode*r);//根据顺序遍历时打印节点。 无效按顺序打印(); 作废打印后订单(); } BTree::BTree() { 根=新的TNode(1); 根->父=0; 根->左=新的TNode(2); 根->右=新的TNode(3); 根->左->左=新TNode(4); 根->左->右=新TNode(5); 根->右->左=新T节点(6); } void BTree::打印预订单(TNode*r) { 如果(r==0) { 返回; } 库特瓦尔; 打印预订单(右->左); 打印预订单(r->右); } int main() { b树y; y、 打印预订单(y.root); 返回0; }

C++;按序、前序和后序遍历二叉树 我目前正在研究一个C++项目,其中的一部分是用顺序、预序和后序遍历二叉树。p> 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; } 类TNode { 公众: int-val; TNode(){} TNode(intv){val=v;} t节点*左; TNode*对; TNode*父节点; }; B类树 { void print_pre_order(TNode*r);//根据顺序遍历时打印节点。 无效按顺序打印(); 作废打印后订单(); } BTree::BTree() { 根=新的TNode(1); 根->父=0; 根->左=新的TNode(2); 根->右=新的TNode(3); 根->左->左=新TNode(4); 根->左->右=新TNode(5); 根->右->左=新T节点(6); } void BTree::打印预订单(TNode*r) { 如果(r==0) { 返回; } 库特瓦尔; 打印预订单(右->左); 打印预订单(r->右); } int main() { b树y; y、 打印预订单(y.root); 返回0; },c++,binary-tree,tree-traversal,inorder,preorder,C++,Binary Tree,Tree Traversal,Inorder,Preorder,在我的默认构造函数中,我初始化了一些节点的值,但是当我运行代码时,我得到的输出是“124”,并得到一个错误。我不知道我哪里做错了,有人能帮忙吗?我看不到程序将任何指针设置为零的迹象,因此如果(r==0)不太可能触发退出 尝试一下: class TNode { public: int val; TNode(): val(0), left(nullptr), right(nullptr), parent(nullptr) {} TNode(int v): val(v), left(n

在我的默认构造函数中,我初始化了一些节点的值,但是当我运行代码时,我得到的输出是“124”,并得到一个错误。我不知道我哪里做错了,有人能帮忙吗?

我看不到程序将任何指针设置为零的迹象,因此
如果(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;
};
告诉编译器一个错误即将发生。之后,代码将所有指针成员初始化为指向null

改变

if (r == 0)


为了更好地传达意图,您应该准备就绪。

在BTree()构造函数中定义BTree成员变量root并初始化,在遍历之前用节点填充BTree。程序非常不完整。错误是什么?因为我使用的是Visual Studio,它只会说“程序已停止工作”@smack,你走了这么远真让人惊讶
class BTree
似乎没有
BTree::BTree()
或任何使用过的成员变量。请编辑您的问题以包含。我非常感谢您的帮助!代码正在运行!再次感谢@用户4581301
if (r == nullptr)