井号法(#)创建二叉树(利用前序遍历来建树)C++实现

简介: 井号法(#)创建二叉树(利用前序遍历来建树)C++实现

利用#号法来创建二叉树

输入:

ABD##E##C#F##

对应该输入的二叉树应为这样

解题思路:

vector数组存储输入的节点数据

用前序遍历的顺序去建树

如果是#,则表明该节点为空

否则先创建左子树,然后右子树

递归调用

代码:

/**
 *作者:魏宝航
 *2020年11月26日,下午23:55
 */
#include<iostream>
#include<vector>
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;
    }
};
static int i = 0;
Node* CreateTree(vector<char> arr,Node* root) {
    if (i < arr.size()) {
        char temp = arr[i++];
        if (temp == '#') {
            return NULL;
        }
        else {
            root = new Node();
            root->ch = temp;
            root->left = CreateTree(arr, root->left);
            root->right = CreateTree(arr, root->right);
        }
    }
    return root;
}
void preOrder(Node* root) {
    if (root == NULL) {
        return;
    }
    cout << root->ch << " ";
    preOrder(root->left);
    preOrder(root->right);
}
int main() {
    int n;
    cin >> n;
    vector<char> v;
    for (int i = 0; i < n; i++) {
        char ch;
        cin >> ch;
        v.push_back(ch);
    }
    Node* root=new Node();
    root=CreateTree(v,root);
    preOrder(root); 
}


目录
相关文章
|
2月前
|
C++
基本二叉树与排序二叉树(C++源码)
本程序实现二叉树基本操作与二叉排序树应用。支持前序建树、四种遍历、求深度、叶子数、第K层节点数及查找功能;并实现二叉排序树的构建、中序输出与查找比较次数统计,分析不同插入顺序对树形态和查找效率的影响。
|
11月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
332 12
|
11月前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
192 10
|
11月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
495 3
|
存储 C++
【C++】二叉树进阶之二叉搜索树(下)
【C++】二叉树进阶之二叉搜索树(下)
100 4
|
Java 编译器 C++
【C++】二叉树进阶之二叉搜索树(上)
【C++】二叉树进阶之二叉搜索树(上)
102 3
|
算法 C++
【C++高阶】高效搜索的秘密:深入解析搜索二叉树
【C++高阶】高效搜索的秘密:深入解析搜索二叉树
117 2
|
存储 C++
【C++练级之路】【Lv.14】二叉搜索树(进化的二叉树——BST)
【C++练级之路】【Lv.14】二叉搜索树(进化的二叉树——BST)
131 0
【C++练级之路】【Lv.14】二叉搜索树(进化的二叉树——BST)
|
存储 C++
【C++】二叉树进阶 -- 详解
【C++】二叉树进阶 -- 详解
|
存储 C++
二叉树的操作(C++实现)
二叉树的操作(C++实现)