剑指offer重建二叉树
来源:互联网 发布:淘宝优站今日特价专场 编辑:程序博客网 时间:2024/06/06 06:30
using namespace std;
struct BinaryTreeNode
{
int value;
BinaryTreeNode* left;
BinaryTreeNode* right;
};
{
int value;
BinaryTreeNode* left;
BinaryTreeNode* right;
};
BinaryTreeNode* ConstrctCore
(
int *startPreOrder, int *endPreOrder,
int *startInOrder, int *endInorder
)
{
//前序遍历序列的第一个数字是根节点的值
int rootValue = startPreOrder[0];
BinaryTreeNode* root = new BinaryTreeNode();
root->value = rootValue;
root->left = root->right = NULL;
(
int *startPreOrder, int *endPreOrder,
int *startInOrder, int *endInorder
)
{
//前序遍历序列的第一个数字是根节点的值
int rootValue = startPreOrder[0];
BinaryTreeNode* root = new BinaryTreeNode();
root->value = rootValue;
root->left = root->right = NULL;
if (startPreOrder == endPreOrder)
{
if (startInOrder == endInorder && *startPreOrder == *startInOrder)
return root;
else
throw exception("Invalid input");
}
//在中序遍历中找到根节点的值
int* rootInOrder = startInOrder;
while (rootInOrder <= endInorder &&*rootInOrder != rootValue)
++rootInOrder;
{
if (startInOrder == endInorder && *startPreOrder == *startInOrder)
return root;
else
throw exception("Invalid input");
}
//在中序遍历中找到根节点的值
int* rootInOrder = startInOrder;
while (rootInOrder <= endInorder &&*rootInOrder != rootValue)
++rootInOrder;
if (rootInOrder == endInorder&&*rootInOrder != rootValue)
throw exception("Invalid input.");
throw exception("Invalid input.");
int leftLength = rootInOrder - startInOrder;
int *leftPreOrderEnd = startPreOrder + leftLength;
if (leftLength > 0)
{
//构建左子树
root->left = ConstrctCore(startPreOrder + 1, leftPreOrderEnd, startInOrder, rootInOrder - 1);
}
if (leftLength < endPreOrder - startPreOrder)
{
//构建右子树
root->right = ConstrctCore(leftPreOrderEnd + 1, endPreOrder, rootInOrder + 1, endInorder);
}
return root;
}
int *leftPreOrderEnd = startPreOrder + leftLength;
if (leftLength > 0)
{
//构建左子树
root->left = ConstrctCore(startPreOrder + 1, leftPreOrderEnd, startInOrder, rootInOrder - 1);
}
if (leftLength < endPreOrder - startPreOrder)
{
//构建右子树
root->right = ConstrctCore(leftPreOrderEnd + 1, endPreOrder, rootInOrder + 1, endInorder);
}
return root;
}
BinaryTreeNode* Construct(int* preOrder, int* inOrder, int length)
{
if (preOrder == NULL || inOrder == NULL || length <= 0)
return NULL;
return ConstrctCore(preOrder, preOrder + length - 1, inOrder, inOrder + length - 1);
}
{
if (preOrder == NULL || inOrder == NULL || length <= 0)
return NULL;
return ConstrctCore(preOrder, preOrder + length - 1, inOrder, inOrder + length - 1);
}
int main()
{
int preOrder[8] = { 1,2,4,7,3,5,6,8 };
int inOrder[8] = { 4,7,2,1,5,3,8,6 };
BinaryTreeNode *han;
han = Construct(preOrder, inOrder, 8);
return 0;
}
{
int preOrder[8] = { 1,2,4,7,3,5,6,8 };
int inOrder[8] = { 4,7,2,1,5,3,8,6 };
BinaryTreeNode *han;
han = Construct(preOrder, inOrder, 8);
return 0;
}
阅读全文
0 0
- [剑指offer]重建二叉树
- 【剑指offer】重建二叉树
- 剑指offer--重建二叉树
- 剑指offer---重建二叉树
- 剑指Offer-重建二叉树
- 剑指offer:重建二叉树
- 剑指offer-重建二叉树
- 《剑指offer》重建二叉树
- 【剑指Offer】重建二叉树
- 剑指offer-重建二叉树
- 《剑指offer》-重建二叉树
- 剑指offer 重建二叉树
- 剑指offer:重建二叉树
- 【剑指offer】重建二叉树
- 剑指offer 重建二叉树
- [剑指offer]重建二叉树
- 剑指offer--重建二叉树
- 《剑指offer》重建二叉树
- crypt.4.单向函数的陷阱
- ViewDragHelper讲解
- iOS的成员变量、实例变量、属性变量
- 几种线程的区别
- SQL---NOW()函数,如何在mysql数据库中插入当前日期,当前时间
- 剑指offer重建二叉树
- 段错误调试
- @jsonIgnore不生效
- Charles4.1.4破解
- Portal技术综述(转)
- 【系统学习SpringBoot】SpringBoot配置logging日志及输出日志
- HTML初步认识
- javabean
- 解决npm -v 无反应