由前序遍历和中序遍历构建二叉树(C++语言)

简介: 由前序遍历和中序遍历构建二叉树(C++语言)

设计思路:

char* pre为前序遍历的顺序

char* in为中序遍历的顺序

首先建立一个指针p,用循环在in中找到根节点

left为左子树个数=p-in(指针差值)

right为右子树个数(n-left-1)

之后递归调用该函数构建左右子树

代码:

/**
 *作者:魏宝航
 *2020年11月27日,下午15:50
 */
#include<iostream>
using namespace std;
class Node {
public:
    char ch;
    Node* left;
    Node* right;
    Node() {
        ch = '\0';
        left = NULL;
        right = NULL;
    }
    Node(char ch, Node* left, Node* right) {
        this->ch = ch;
        this->left = left;
        this->right = right;
    }
};
//二叉树的前序遍历
void preOrder(Node* root) {
    if (root == NULL) {
        return;
    }
    cout << root->ch << " ";
    preOrder(root->left);
    preOrder(root->right);
}
//二叉树的中序遍历
void midOrder(Node* root) {
    if (root == NULL) {
        return;
    }
    midOrder(root->left);
    cout << root->ch << " ";
    midOrder(root->right);
}
//二叉树的后序遍历
void postOrder(Node* root) {
    if (root == NULL) {
        return;
    }
    postOrder(root->left);
    postOrder(root->right);
    cout << root->ch << " ";
}
//由前序遍历和中序遍历构建二叉树
Node* buildTree(char* pre, char* in, int n) {
    if (n == 0) {
        return NULL;
    }
    Node* root = new Node();
    root->ch = *pre;
    char* p;
    //在中序中找到根节点
    for (p = in; p < in + n; p++) {
        if (*p == *pre) {
            break;
        }
    }
    int left = p - in;//左子树个数
    int right = n - left - 1;//右子树个数
    //递归构建左子树
    root->left = buildTree1(pre + 1, in, left);
    //递归构建右子树
    root->right = buildTree1(pre + left + 1, p + 1, right);
    return root;
}
int main() {
    char a[] = { 'A','B','D','E','C','F' };
    char b[] = { 'D','B','E','A','C','F' };
    Node* root = new Node();
    root = buildTree(a, b, 6);
    preOrder(root);
    midOrder(root);
}


目录
相关文章
|
2月前
|
存储
二叉树的先序遍历和后序遍历的区别
先序遍历和后序遍历在遍历顺序、应用场景、实现方式以及复杂度等方面都存在一定的区别,在实际应用中需要根据具体问题的需求来选择合适的遍历方式。
75 5
|
人工智能 Java 测试技术
二叉树通过前序中序来构建二叉树(炒鸡详细到每一步)
二叉树通过前序中序来构建二叉树(炒鸡详细到每一步)
【霍罗维兹数据结构】二叉树前中后序遍历 | 层序遍历 | 复制二叉树 | 判断两个二叉树全等 | 可满足性问题
【霍罗维兹数据结构】二叉树前中后序遍历 | 层序遍历 | 复制二叉树 | 判断两个二叉树全等 | 可满足性问题
80 0
|
8月前
|
存储 算法
【数据结构与算法】8.二叉树的基本概念|前序遍历|中序遍历|后序遍历
【数据结构与算法】8.二叉树的基本概念|前序遍历|中序遍历|后序遍历
|
编译器
深入解析前序遍历:探索二叉树的前进之路
在计算机科学的广袤领域中,数据结构是解决问题的基础,而二叉树作为一种重要且常用的数据结构,为问题的处理提供了高效的方式。在二叉树的世界中,遍历是一项核心操作,它能够让我们有条不紊地访问每一个节点,实现从根部到叶子、从叶子到根部等不同的访问序列。而前序遍历(Preorder Traversal)作为一种经典的遍历方式,在这个过程中扮演着重要角色。
133 0
|
8月前
|
存储 算法 前端开发
前端算法- 二叉树的中序遍历
前端算法- 二叉树的中序遍历
二叉树的中后序遍历构建及求叶子
二叉树的中后序遍历构建及求叶子
181 0
|
存储 算法 前端开发
前端算法-后序遍历二叉树
前端算法-后序遍历二叉树
|
存储 算法 前端开发
前端算法-前序遍历二叉树
前端算法-前序遍历二叉树
非递归方式实现二叉树的前、中、后序遍历
非递归方式实现二叉树的前、中、后序遍历

热门文章

最新文章