二叉树前序中序输出后序[计算所2017保研真题]

来源:互联网 发布:手机在淘宝怎么退换货 编辑:程序博客网 时间:2024/06/05 16:26
前序遍历:     1.访问根节点     2.前序遍历左子树     3.前序遍历右子树 中序遍历:     1.中序遍历左子树     2.访问根节点     3.中序遍历右子树 后序遍历:     1.后序遍历左子树     2.后序遍历右子树     3.访问根节点给定一个二叉树前序和中序串,输出后序串
//k和leftnum还是不一样的,要注意写对关系//数组定义最前面#include <queue>#include <iostream>using namespace std;char pre[7] = {'a','b','c','d','e','f','g'};char in[7] = { 'b','d','c','e','a','g','f' };//前面需要定义一下struct node                     //节点 {char date;node* leftcd;node* rightcd;};//前序中序出后序node *mytree(int prel,int prer,int inl,int inr){node *root = new node();if (prel > prer) return NULL;char value = pre[prel];root->date = value;int k;for ( k = inl; k < inr; k++){if (in[k] == value) break;}int leftnum = k - inl;root->leftcd = mytree(prel+1,prel+leftnum,inl,k-1);root->rightcd = mytree(prel+leftnum+1,prer,k+1,inr);return root;}void postout(node *T){if (T != NULL){postout(T->leftcd);postout(T->rightcd);cout << T->date << " ";}}int main(){node *T = NULL;T = mytree(0, 6, 0, 6);//preout(T);postout(T);}

阅读全文
0 0