1、#includestringusing namespace std;struct BiNode /二叉树的结点结构 char data; BiNode *lchild, *rchild;class BiTreepublic: BiTree( ); /构造函数,初始化一棵二叉树,其前序序列由键盘输入 BiTree(void); /析构函数,释放二叉链表中各结点的存储空间 BiNode* Getroot(); /获得指向根结点的指针 void PreOrder(BiNode *root); /前序遍历二叉树 void BiTree:yezi(BiNode *root,int &n);private
2、: BiNode *root; /指向根结点的头指针 BiNode *Creat( ); /有参构造函数调用 void Release(BiNode *root); /析构函数调用BiTree:BiTree( ) root = Creat( );BiTree(void) Release(root);BiNode* BiTree:Getroot( ) return root;void BiTree:PreOrder(BiNode *root) if(root=NULL) return; else coutdatalchild); PreOrder(root-rchild); n) if(root
3、) if(root-lchild=NULL&rchild=NULL) n+; yezi(root-lchild,n);rchild,n);Creat( ) char ch; cinch; if (ch=#) root = NULL; else root = new BiNode; /生成一个结点 root-data=ch;lchild = Creat( ); /递归建立左子树rchild = Creat( ); /递归建立右子树Release(BiNode *root) if (root!= NULL) Release(root- /释放左子树 /释放右子树 delete root;void
4、main() cout请输入二叉树的结点数据: BiTree bt; /创建一棵树 BiNode *root = bt.Getroot( ); /获取指向根结点的指针 int n=0; coutstruct node int data; node *lchild; node *rchild;node *root=NULL;void mid(node*root,int key=500) int sum=0; stacks; while(NULL!=root | !s.empty() if(NULL!=root) s.push(root); root=root-lchild; else root=s.top(); / coutlchild & NULL=root-rchild) +sum; s.pop();rchild;sumdata=200; b-data=300; a1-data=400; a2-data=500; b1-data=600; b2-data=700;lchild=a;rchild=b;lchild=a1;rchild=a2;lchild=b1;rchild=b2;lchild=NULL;rchild=NULL; mid(root); return 0;