【剑指offer】 重建二叉树
2017-04-07 21:15
489 查看
摘要
剑指offer面试题5:二叉树的节点的定义如下:
struct BinaryTreeNode { int _data;//二叉树数据 BinaryTreeNode* _left;//左孩子指针 BinaryTreeNode* _right;//右孩子指针 BinaryTreeNode(const int data) :_data(data) ,_left(NULL) ,_right(NULL) {} };
解决方法:
在二叉树中 ,,,前序遍历------就是 先访问的是根节点,再访问左边节点,最虎访问的是 右边节点
中序遍历------就是 先访问的是左边节点,再访问根节点,最后访问的是 右边节点
我们先来分析一下这个题 :
二叉树的先序遍历 第一个遍历的节点 一定是 根节点
二叉树的中序遍历 首先遍历的节点是 一定是 根节点的左子树
那么 、、、前序遍历结果和中序遍历的结果 就可以分成三部分 如下图所示:
通过前序遍历和中序遍历的特点,,我们已经可以初步得到该二叉树的 三部分:
1、根节点
2、左右 子树的前序遍历序列;
3、左右子树的中序遍历序列。
分析到此处、、、我们很多的人都会想到 使用递归,,,,
将左右子树的前中序遍历出 当成是 一颗 二叉树的 前中序遍 历 来说重建二叉树 ,并将建成的二叉树的根节点当做是 原根节点的左右孩子。。。
说道此处,这道题的解法也大致出来了。。。
下面我们来用代码实现一下吧!!!!!!!!!!
// typedef BinaryTreeNode Node; //[ Prefirst,Prelast] //实现一个二叉树的递归算法 // 前序序列[ Prefirst,Prelast] 中序序列 [Infirst,Inlast]; Node* _CreateNewTree(int* Prefirst,int * Prelast,int* Infirst,int *Inlast) { if(Prefirst==Prelast )//当序列只有一个值时,表示当前的字数只有一个节点 return new Node(*Prefirst);//直接返回一个节点 int value = *Prefirst;//得到根节点的 value值 Node * node= new Node(value);//建立当前子树的根节点 //找到当前树 它的左右子树的节点个数 int * first = Infirst; int * last = Inlast; for(; first<= last;++first) { if(*first == value) break; } if(first > last) assert(false); int n = first - Infirst;//n表示的是左子树的节点个数 if(first != Infirst)//要是当前树的左子树没有一个节点,,,,就不需要进入递归了。 node->_left = _CreateNewTree(Prefirst+1,Prefirst+n,Infirst,first-1); if(first != Inlast)//要是当前树的右子树没有一个节点,,,,就不需要进入递归了。 node->_right = _CreateNewTree(Prefirst+ n+1,Prelast,first+1,Inlast); return node; } Node* CreateNewTree(int * Pre,int * In,int length) { assert(Pre&&In); assert(length);// return _CreateNewTree(Pre,Pre+length-1,In,In+length-1); }
相关文章推荐
- 剑指offer——重建二叉树
- 剑指Offer面试题6(Java版):重建二叉树
- 剑指offer——重建二叉树
- [牛客网,剑指offer,python] 重建二叉树
- 剑指offer之面试题6:重建二叉树
- 剑指Offer_面试题06_重建二叉树
- 【剑指offer】重建二叉树
- 剑指offer---重建二叉树
- 剑指offer 面试题6 重建二叉树 java版答案
- 剑指offer--重建二叉树
- 剑指offer面试题[6]-重建二叉树
- 剑指offer-面试6:重建二叉树(二叉树前中后序遍历)
- 剑指offer_4 重建二叉树
- 牛客网刷题--剑指offer(重建二叉树)
- 剑指offer--重建二叉树
- 剑指offer--面试题6:重建二叉树--Java实现
- 【剑指offer】重建二叉树
- 剑指offer 2 重建二叉树
- [剑指offer-1385]重建二叉树
- 九度Online Judge | 剑指Offer | 重建二叉树