[算法]二叉树创建

【链式存储结构】

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

【层次创建二叉树】

// 创建二叉树
TreeNode* CreateTreeByLevel(vector<char> num){
    int len = num.size();
    if(len == 0){
        return NULL;
    }//if
    queue<TreeNode*> queue;
    int index = 0;
    // 创建根节点
    TreeNode *root = new TreeNode(num[index++]);
    // 入队列
    queue.push(root);
    TreeNode *p = NULL;
    while(!queue.empty() && index < len){
        // 出队列
        p = queue.front();
        queue.pop();
        // 左节点
        if(index < len && num[index] != -1){
            // 如果不空创建一个节点
            TreeNode *leftNode = new TreeNode(num[index]);
            p->left = leftNode;
            queue.push(leftNode);
        }
        index++;
        // 右节点
        if(index < len && num[index] != -1){
            // 如果不空创建一个节点
            TreeNode *rightNode = new TreeNode(num[index]);
            p->right = rightNode;
            queue.push(rightNode);
        }
        index++;
    }//while
    return root;
}

-1代表NULL

创建如上二叉树输入:

15 11 20 8 14 -1 -1 -1 -1 13 -1

【先序创建二叉树】

//按先序序列创建二叉树
int CreateBTree(TreeNode*& T){
    int data;
    //按先序次序输入二叉树中结点的值,-1表示空树
    cin>>data;
    if(data == -1){
        T = NULL;
    }
    else{
        T = new TreeNode(data);
        //构造左子树
        CreateBTree(T->left);
        //构造右子树
        CreateBTree(T->right);
    }
    return 0;
} 

-1代表NULL

创建如上二叉树输入:

15 11 8 -1 -1 14 13 -1 -1 -1 20 -1 -1

时间: 2024-11-01 04:37:23

[算法]二叉树创建的相关文章

二叉树创建及遍历算法

//二叉树处理头文件 //包括二叉树的结构定义,二叉树的创建,遍历算法(递归及非递归), /* 作者:成晓旭 时间:2001年10月7日(18:49:38-20:00:00) 内容:完成二叉树创建,二叉树的前,中,后序遍历(递归) 时间:2001年10月7日(21:09:38-22:09:00) 内容:完成二叉树的前,中序遍历(非递归) 时间:2001年10月8日(10:09:38-11:29:00) 内容:完成查找二叉树的静,动态查找(非递归) */ #include "stdlib.h&qu

关于二叉树创建时结构体指针的用法

问题描述 关于二叉树创建时结构体指针的用法 关于二叉树创建时结构体指针的用法 在创建二叉树时我们常常这样用typedef声明一个结点类型和一个二叉树链表: typedef struct BiNode{ //二叉链表定义 char data; struct BiNode *lchild,*rchild; }BiTNode,*BiTree; 这里用typedef声明了一个结点类型BiTNode,BiTree在这里是一个结构体指针. 在创建一个二叉树时我们常常这样定义一个创建函数: 在这个创建二叉树函

c++-C++有关二叉树创建与遍历,求大神指点

问题描述 C++有关二叉树创建与遍历,求大神指点 . [问题描述] 根据输入提示,构建二叉树.本题目中,对所有节点进行编号 [输入形式] 第一行整数m,表示二叉树中共有m个非空节点 第二行m个整数,表示编号节点对应的value值,编号从1到m 后面一共m行,表示编号节点的左右子节点编号,0表示对应位置的子节点不存在 [输出形式] 按先序输出格式输出二叉树 [样例输入] 8 10 4 3 9 2 5 6 7 1 2 3 2 0 4 3 5 6 4 7 0 5 0 0 6 0 8 7 0 0 8 0

c语言-C语言文件/哈夫曼树/算法/二叉树

问题描述 C语言文件/哈夫曼树/算法/二叉树 在一个函数中,下面这两行运行无错误 fp=fopen("CodeFile.dat","wb"); fwrite(HC[i],sizeof(char),strlen(HC[i])+1,fp); //其中HC的类型是char ** //然后在另外一个函数中加入 fp=fopen("CodeFile.dat","rb"); for(int i=1;i<=n;i++) fread(H

C++数据结构与算法------------二叉树的2种创建

1.以数组为存储结构的二叉树     模板+完全二叉树(适合完全二叉树存储) /* 二叉树的线性存储  ..用数组  作为存储结构 ,需要对二叉树 按照层次进行编号  .适合完全二叉树和满二叉树. 编号就是二叉树数组的值  这里的节点要按照层次 为二叉树的每个节点编号   如果节点编号为i  那么父节点   i/2  子节点  2i   2i+1  我们在这里操作以数组存储的完全二叉树 就要了解二叉树的概念. */ #include <iostream> using namespace std

算法-二叉树最左的第一个位置查询

问题描述 二叉树最左的第一个位置查询 C#请教大家一个问题:如果找出最左的空位. A B C D E F G H I J K L M 这个树,E的位置是空的,用什么算法能够快速的找出这个E呢.E是在3层第2点. 请教大家指点指点. 解决方案 http://baike.baidu.com/link?url=b9JKnSg1VKFOB6iZhlBcKTG1uvGUCIDekxnnp3nzcYsfHcJgZuTk9qpCRC2YVD84z3Z_qld8mlFS_BiRBBQk_q 解决方案二: 查询二

数据结构算法-关于二叉树的创建问题

问题描述 关于二叉树的创建问题 我想在主函数中先创建一个二叉树,然后再遍历.但我的程序调用CreateBiTree输入完要输入的数之后,还是一直在等待输入,无法停止.以致无法执行到后面的遍历二叉树函数.望高手给解答下! #include #include #include struct?BiTree { int?data; struct?BiTree?*lchild; struct?BiTree?*rchild; }; int?CreateBiTree(BiTree?*t) {??? ?????

C语言实现二叉树的常用的算法(递归与非递归实现遍历)

队列头文件: #include <stdio.h> #include "BinaryTree.h" // // 队列头文件:Queue.h #ifndef QUEUE_H #define QUEUE_H // // 队列最大元素个数 #define MAX_QUEUE_SIZE 10 typedef BTree QueueElemType; // // 队列结构体 typedef struct tagQueue { BTree *base; int front; // 头指

二叉树中序线索化算法

// // 二叉树线索化的头文件:BinaryThreadTree.h #ifndef B_T_T_H #define B_T_T_H #include <stdio.h> // // 返回OK表示正常返回 #define OK 1 // // 返回ERROR,表示异常返回 #define ERROR 0 // // 返回OVERFLOW,表示内存溢出 #define OVERFLOW -1 // // 线索结构体 typedef enum { Link = 0, // 指针 Thread =