数据结构-重建二叉树
2014-05-04 13:29
381 查看
#include <iostream> using namespace std; struct BinaryTreeNode{ int data; BinaryTreeNode* lchild; BinaryTreeNode* rchild; }; BinaryTreeNode* Rebuilt(int *pre,int* preEnd,int* in,int* inEnd){ BinaryTreeNode* root = new BinaryTreeNode; root->data = pre[0]; root->lchild = root->rchild = NULL; if(pre == preEnd){ //循环结束条件 return root; } int* curP = in; while(*curP != pre[0] && in < inEnd){ //寻找中序和先序相同的节点 curP++; } int LchildSize = curP - in; int* LchildEnd = pre + LchildSize ; if(LchildSize > 0){ root->lchild = Rebuilt(pre+1,pre+LchildSize,in,curP-1); //控制左节点范围进行递归 } if((preEnd - pre) > LchildSize){ root->rchild = Rebuilt(pre+LchildSize+1,preEnd,curP+1,inEnd); } return root; } BinaryTreeNode* Start(int* pre,int* in,int size){ if(pre == NULL || in == NULL){ return NULL; } return Rebuilt(pre,pre+size-1,in,in+size-1); //控制左右子节点的范围 } void PreOrder(BinaryTreeNode* root){ if(root != NULL){ cout << root->data << " "; PreOrder(root->lchild); PreOrder(root->rchild); } } void InOrder(BinaryTreeNode* root){ if(root != NULL){ InOrder(root->lchild); cout << root->data << " "; InOrder(root->rchild); } } void PostOrder(BinaryTreeNode* root){ if(root != NULL){ PostOrder(root->lchild); PostOrder(root->rchild); cout << root->data << " "; } } int main() { int Pre[] = {1,2,4,7,3,5,6,8}; int In[] = {4,7,2,1,5,3,8,6}; int Size = sizeof(Pre)/sizeof(int); //获取长度,以便得到尾指针 BinaryTreeNode *root = Start(Pre,In,Size); cout << "先序遍历: " ; PreOrder(root); cout << endl; cout << "中序遍历: " ; InOrder(root); cout << endl; cout << "后序遍历: " ; PostOrder(root); return 0; }
相关文章推荐
- 数据结构重建二叉树
- (数据结构)oj重建二叉树(用权值作为新二叉树的下标)
- [数据结构]重建二叉树
- 数据结构之二叉树1(前序中序后序层序遍历,重建二叉树)
- 数据结构:关于重建二叉树的三种思路
- 数据结构:关于重建二叉树的三种思路
- 【数据结构】二叉树的简单遍历及基本操作
- 剑指offer 面试题6—重建二叉树
- 《剑指offer》问题7 重建二叉树 Java实现
- 重建二叉树,给出一个二叉树的前序和中序遍历,恢复二叉树的结构
- 1020. Tree Traversals (25)和1385,重建二叉树
- 重建二叉树 -- 漫漫算法路 刷题篇
- 重建二叉树
- java 数据结构二叉树的实现代码
- 数据结构快速回顾——二叉树 解幂子集问题
- 剑指offer---重建二叉树(6)
- 数据结构二叉树的遍历
- C++ 数据结构-------二叉树实现
- 数据结构 树 层次遍历二叉树 C语言版
- [剑指offer][面试题06]重建二叉树