数据结构 二叉树 已知前序中序遍历求后续遍历的递归实现

代码很短,实现起来也很简单,下面是代码:

//// main.cpp// PreMidgetPost//// Created by xin wang on 4/29/15.// Copyright (c) 2015 xin wang. All rights reserved.//#include <iostream>//链表二叉树的节点类template <class T>class BinaryTreeNode{public:BinaryTreeNode(){LeftChild = RightChild=0;}BinaryTreeNode(const T& e){data=e;LeftChild=RightChild =0;}BinaryTreeNode(const T& e,BinaryTreeNode *l,BinaryTreeNode *r){data = e;LeftChild =l;RightChild =r;}T data;BinaryTreeNode<T> *LeftChild,*RightChild;};//定义一个数组,分别装前序遍历和中序遍历的数组int pre_order[100];int mid_order[100];BinaryTreeNode<int> *translate(int pre_l,int pre_r,int mid_l,int mid_r){if (pre_r-pre_l<0) {//return 0;}BinaryTreeNode<int> *root;//new一个root节点root= new BinaryTreeNode<int>;root->data=pre_order[pre_l];//前序遍历的第一个节点是跟节点std::cout<<root->data<<"root"<<std::endl;if (pre_r==pre_l) {//如果两者相等,说明只有一个树节点root->LeftChild=NULL;root->RightChild=NULL;return root;}int index;//找到中序遍历中跟节点所在的位置for (index = mid_l; index<=mid_r; index++) {if (mid_order[index] == pre_order[pre_l]) {break;}}root->LeftChild = translate(pre_l+1, pre_l+(index-mid_l), mid_l, index-1);//递归找到跟节点的左孩子的值root->RightChild= translate(pre_l+(index-mid_l)+1,pre_r , index+1, mid_r);//递归找到根节点右孩子的值return root;}//将后序遍历打印出来void post_Order(BinaryTreeNode<int> *root){if(root){post_Order(root->LeftChild);post_Order(root->RightChild);std::cout<<"值"<<root->data<<std::endl;}}int main(int argc, const char * argv[]) {int in=0;std::cout<<"请输入数组的长度:"<<std::endl;std::cin>>in;std::cout<<"请输入数组前序"<<std::endl;int zu;int bb=0;int num=0;while (bb<in) {std::cin>>zu;pre_order[num]=zu;num++;bb=bb+1;}std::cout<<"请输入数组的中序"<<std::endl;int zuzhong;int numzhong=0;int aa=0;while(aa<in){std::cin>>zuzhong;mid_order[numzhong]=zuzhong;numzhong++;aa=aa+1;}BinaryTreeNode<int> *root = translate(0, in-1, 0, in-1);std::cout<<"后序遍历"<<std::endl;post_Order(root);return 0;}

,学习会使你永远立于不败之地。

数据结构 二叉树 已知前序中序遍历求后续遍历的递归实现

相关文章:

你感兴趣的文章:

标签云: