根据二叉树的先序和中序遍历重建二叉树
2014-11-04 17:07
351 查看
#include <iostream> #include <cstdio> using namespace std; typedef struct BiTNode { int data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; BiTree PreInCreate(char A[], char B[], int l1, int h1, int l2, int h2) { BiTNode *root = (BiTNode *)malloc(sizeof(BiTNode)); root->data = A[l1]; int i; for(i = l2; B[i] != root->data; i++); int llen = i - l2; int rlen = h2 - i; if(llen){ root->lchild = PreInCreate(A, B, l1+1, l1+llen, l2, l2+llen-1); } else { root->lchild = NULL; } if(rlen) { root->rchild = PreInCreate(A, B, h1-rlen+1, h1, h2-rlen+1, h2); } else { root->rchild = NULL; } return root; } void PreOrder(BiTree T) { if(T != NULL) { printf("%c ", T->data); PreOrder(T->lchild); PreOrder(T->rchild); } } void InOrder(BiTree T) { if(T != NULL) { InOrder(T->lchild); printf("%c ", T->data); InOrder(T->rchild); } } int main() { char A[100], B[100]; printf("please input preorder and inorder :\n"); scanf("%s%s", A+1, B+1); A[0] = A[0] = 'a'; int len = strlen(A)-1; BiTNode * root = PreInCreate(A, B, 1, len, 1, len); PreOrder(root); cout << endl; InOrder(root); return 0; } /** Test: 124356 421536 **/
相关文章推荐
- 根据前序遍历和中序遍历重建二叉树
- 七:重建二叉树(根据先序遍历(或者后序遍历)和中序遍历重建二叉树)
- 根据前序和中序遍历重建二叉树
- 1935. 二叉树重建(根据先序遍历和中序遍历重建二叉树并进行广度优先遍历)
- 根据二叉树的先序遍历和中序遍历重建二叉树
- Python练手之根据前序和中序&根据中序和后序重建二叉树,输出前序、中序和后序遍历结果
- POJ 2255Tree Recovery 二叉树重建(根据前序遍历和中序遍历写出后序遍历)
- 根据二叉树前序遍历和中序遍历的结果,重建出该二叉树并后序遍历之 java代码
- 根据前序遍历和中序遍历重建二叉树
- 根据先序和中序遍历重建二叉树
- 根据先序和中序遍历重建二叉树
- 根据二叉树的前序遍历和中序遍历重建二叉树
- 根据前序遍历和中序遍历重建二叉树的Java实现
- 【面试题】剑指Offer-6-根据前序和中序遍历重建二叉树
- 剑指Offer_06 根据前序遍历和中序遍历序列 重建二叉树
- 根据前序遍历序列和中序遍历序列重建二叉树
- 根据先序遍历序列和中序遍历序列重建二叉树
- 根据先序和中序遍历重建二叉树java实现
- 根据先序遍历数列和中序遍历数列重建二叉树
- 剑指offer刷题之c++实现的根据二叉树的前序和中序遍历重建二叉树