关闭

根据二叉树的先序和中序来构建二叉树

标签: 二叉树stringprewp
2166人阅读 评论(1) 收藏 举报
分类:

根据二叉树的先序和中序 来构建二叉树然后再输出二叉树的后序这是笔试题中常见的题目。
其实思想很简单 string pre 为先序的字符串 string in为中序的字符串
pre[0]为树根 找到pre[0]在in中的位置(下标从0开始)为index,则 index为左子树的长度 pre中下标1~index为左子树的先序 下标从index+1~最后为右字数的先序。in中下标0~index-1为左子树的 中序 in中下标index+1~最后为右子树的中序 这样每次都可以由一颗树的先序序列和中序序列确定其左子树和右子树的先序和中序序列 而先序序列中的一个元素为根元素 每次都确定一个根元素,直到整个序列为空

// pre-in-construct-tree.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
struct TreeNode
{
    char val;
    TreeNode *left;
    TreeNode *right;
};
/*
create tree by preorder and inorder string 
*/
TreeNode *createTree(string pre, string in)
{
    TreeNode *t = NULL;
    if (pre.length() > 0)
    {
        t = new TreeNode();
        t->val = pre[0];
        int index = in.find(pre[0]);//find the root node in the inorder string
        t->left = createTree(pre.substr(1, index), in.substr(0, index));
        t->right = createTree(pre.substr(index + 1), in.substr(index + 1));
    }
    return t;
}
void postOrder(TreeNode *root)
{
    if (root)
    {
        postOrder(root->left);
        postOrder(root->right);
        cout << root->val << " ";
    }
    else return;
}
void destroyTree(TreeNode*root)
{
    if (root)
    {
        destroyTree(root->left);
        destroyTree(root->right);
        delete root;
    }
    else return;
}
int main()
{
    string pre = {'1','2','3','4','5','6','7'};
    string in = { '3','2','4','1','6','5','7' };
    TreeNode *root = createTree(pre, in);
    postOrder(root);
    destroyTree(root);
    system("pause");
    return 0;
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

根据前序遍历序列和中序遍历序列构造二叉树算法

一个前序遍历序列和一个中序遍历序列可以确定一颗唯一的二叉树。        根据前序遍历的特点, 知前序序列(PreSequence)的首个元素(PreSequence[0])为二叉树的根(root)...
  • yunzhongguwu005
  • yunzhongguwu005
  • 2013-07-08 11:37
  • 30435

根据先序序列和中序序列创建二叉树

思考:如何才能确定一棵树? 结论:    通过中序遍历和先序遍历可以确定一个树                 通过中序遍历和后续遍历可以确定一个树 ...
  • bbs375
  • bbs375
  • 2016-10-06 19:12
  • 7412

根据先序和中序或后序和中序建立二叉树及树的遍历

二叉树的建立用了递归的思想,本质上是:  先建立根节点--->再建立左子树----->再建立右子树 二叉树的遍历分为先序遍历,中序遍历后序遍历,还有层序遍历    注意无论先序中序还是后序都是先遍历左...
  • u010667082
  • u010667082
  • 2015-05-30 14:49
  • 4640

二叉树的先序,中序,后序遍历以及叶子结点数目

  • 2017-11-28 20:31
  • 3KB
  • 下载

二叉树先序、中序、后序三种遍历的非递归算法

  • 2008-05-15 12:35
  • 15KB
  • 下载

由先序与中序序列构造二叉树

  • 2013-11-19 23:09
  • 1015B
  • 下载

二叉树先序和中序求后序

  • 2014-08-05 13:22
  • 1KB
  • 下载

二叉树(先序中序后序)

  • 2014-09-22 01:02
  • 2KB
  • 下载

Java实现二叉树的先序、中序、后续、层次遍历

  • 2014-09-21 16:29
  • 182KB
  • 下载

二叉树先序中序后序递归非递归遍历并求高度

  • 2014-11-02 14:45
  • 3KB
  • 下载
    个人资料
    • 访问:99716次
    • 积分:4740
    • 等级:
    • 排名:第7078名
    • 原创:374篇
    • 转载:7篇
    • 译文:0篇
    • 评论:6条
    最新评论