知道前序遍历和中序遍历编写程序得到二叉树
来源:互联网 发布:淘宝上卖什么最赚钱 编辑:程序博客网 时间:2024/05/29 16:19
// BinaryTree.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;struct BTreeNode{int m_nValue;BTreeNode* m_pLeft;BTreeNode* m_pRight;};BTreeNode* ConstructCore(int* startPreorder, int* endPreorder, int* startInorder, int* endInorder){//前序遍历序列的第一个数字是根节点的值int rootValue = startPreorder[0];BTreeNode* root = new BTreeNode();root->m_nValue = rootValue;root->m_pLeft = NULL;root->m_pRight = NULL;if (startPreorder == endPreorder){if (startInorder == endInorder && *startPreorder == *startInorder){return root;}else{throw std::exception("Invalid input");}}//在中序遍历中找到根节点的值int* rootInorder = startInorder;while (rootInorder <= endInorder && *rootInorder != rootValue){++rootInorder;}//判断是否存在要找的根节点if (rootInorder == endInorder && *rootInorder != rootValue){throw std::exception("Invalid input");}int leftLength = rootInorder - startInorder;int* leftPreorderEnd = startPreorder + leftLength;//如果左边长度大于0if (leftLength > 0){//构建左子树root->m_pLeft = ConstructCore(startPreorder+1,leftPreorderEnd,startInorder,rootInorder-1);}if (leftLength < endPreorder - startPreorder){//构建右子树root->m_pRight = ConstructCore(leftPreorderEnd+1,endPreorder,rootInorder+1,endInorder);}return root;}BTreeNode* Construct(int* preOrder, int* inOrder, int length){if (preOrder == NULL || inOrder == NULL || length <= 0){return NULL;}else{return ConstructCore(preOrder,preOrder+ length -1, inOrder,inOrder + length -1);}}void PrintTree(BTreeNode* root){if (root->m_pLeft != NULL){PrintTree(root->m_pLeft);}if (root != NULL){cout<<root->m_nValue<<endl;}if (root->m_pRight != NULL){PrintTree(root->m_pRight);}}int _tmain(int argc, _TCHAR* argv[]){int p[] ={1,2,4,7,3,5,6,8};int q[] ={4,7,2,1,5,3,8,6};BTreeNode* tree = Construct(p,q,8);PrintTree(tree);getchar();return 0;}
前序遍历的第一个数字就是根节点的值!知道前序遍历和中序遍历可以得到二叉树的结果!
1 0
- 知道前序遍历和中序遍历编写程序得到二叉树
- java编写二叉树以及前序遍历、中序遍历和后序遍历
- java编写二叉树以及前序遍历、中序遍历和后序遍历
- 知道二叉树的前序遍历和中序遍历重构二叉树
- 已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历?
- 已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历?
- 根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树
- POJ 2255 二叉树由前序遍历中序遍历得到后序遍历
- 前序遍历和中序遍历重建二叉树
- 前序遍历和中序遍历重建二叉树
- 从二叉树的前序和中序得到后续遍历算法
- 二叉树的遍历:前序遍历、中序遍历和后序遍历
- 3.14(c程序实现)已知二叉树的前序遍历和中序遍历,求后序遍历
- 已知二叉树的前序遍历和中序遍历求后序遍历(二叉树)
- 二叉树系列:已知二叉树的中序遍历和前序遍历,求后序遍历
- 二叉树已知先序遍历和中序遍历得到后序遍历
- 已知二叉树的前序遍历和中序遍历重建二叉树(二叉树)
- 【二叉树】根据二叉树的中序遍历和前序遍历,还原二叉树
- 协同过滤之ItemCF(c++实现)
- Swift语言IOS8开发战记1.Button与Alert
- zookeeper原理
- js源码收集
- 关于微信突然停止WeixinJSBridge的接口暂时解决办法
- 知道前序遍历和中序遍历编写程序得到二叉树
- java 操作zookeeper 查看状态
- tcp 3秒 timeout
- Linux - 如何查看USB设备信息
- hive中的外表EXTERNAL TABLE
- JAVA 单例模式与hashmap结合实现缓存
- Cocos2D-x之开发环境配置
- Gradel源码入门二
- 插值