输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
Posted wanglelelihuanhuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。相关的知识,希望对你有一定的参考价值。
假设输入的前序遍历和中序遍历的结果中都不含有重复的数字。 例如,前序遍历序列:{1,2,4,5,6},中序遍历序列:{3,2,4,1,6,5}
在二叉树的前序遍历序列中,第一个数字总是根节点的值。在中序遍历序列中,根节点的值在中间,左子树的值在根节点值的左边,右子树的值在根节点的值的右边。
#include<iostream>
using namespace std;
template<class T>
struct BinaryTreeNode
T _value; //数据
BinaryTreeNode<T>* _left; //左孩子
BinaryTreeNode<T>* _right; //右孩子
BinaryTreeNode()
: _value()
, _left(NULL)
, _right(NULL)
;
template<class T>
class BinaryTree
public:
BinaryTreeNode<T>* ConstructCore(int* startPre,int* endPre,int* startIn,int* endIn)
int rootValue = startPre[0]; //前序遍历的第一个数字就是根节点的值
BinaryTreeNode<T>* root = new BinaryTreeNode<T>();
root->_value = rootValue;
root->_left = root->_right = NULL;
cout << root->_value<< " ";
if (startPre == endPre)
if (startIn == endIn && *startPre == *startIn)
return root;
else
return NULL;
int* rootIn = startIn;
//在中序遍历中找根节点的值
while (*rootIn != rootValue && rootIn <= endIn)
++rootIn;
if (rootIn == endIn && *rootIn != rootValue)
return NULL;
int leftLength = rootIn - startIn;//左子树长度 中序遍历序列中根节点前面的数字都是左子树节点的值
int* leftEnd = startPre + leftLength;//前序遍历序列中左子树的值
//构建左子树
if (leftLength > 0)
root->_left=ConstructCore(startPre+1,leftEnd,startIn,rootIn-1);
//构建右子树
if (leftLength < endPre - startPre)
root->_right = ConstructCore(leftEnd+1,endPre,rootIn+1,endIn);
return root;
BinaryTreeNode<T>* Construct(int* preorder, int* inorder, int length)
if (preorder == NULL || inorder == NULL || length <= 0)
return NULL;
return ConstructCore(preorder,preorder+length-1,inorder,inorder+length-1);
;
int main()
int preorder[] = 1,2,4,7,3,5,6,8 ;
int inorder[] = 4,7,2,1,5,3,8,6 ;
BinaryTree<int> bt;
BinaryTreeNode<int>* root=bt.Construct(preorder, inorder, 8);
return 0;
以上是关于输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。的主要内容,如果未能解决你的问题,请参考以下文章
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5