二叉树的基本结构与实现

实现了二叉树类似链表的一种结构,主要是用两个函数进行添加左右节点,同时每次添加都返回新加上的节点地址,我觉得应该可以进行递归式的动态添加,但是我没有实现。

下面是最简单的二叉树的一些实现操作。

BinaryTree.cpp

 1 #include "iostream"
 2 #include "stdlib.h"
 3
 4 typedef struct _btree_
 5 {
 6     char *data;
 7     struct _btree_ *leftTree;
 8     struct _btree_ *rightTree;
 9 }BTree;
10
11 /*初始化根节点,返回的是根节点地址*/
12 BTree*
13 initRoot(char *data)
14 {
15     BTree *root = (BTree *)malloc(sizeof(BTree));
16     root->data = data;
17     root->leftTree = nullptr;
18     root->rightTree = nullptr;
19     return root;
20 }
21
22 /*添加左节点,并返回加入的左节点的地址*/
23 BTree*
24 addLeft(BTree *father, char *data)
25 {
26     BTree *p = (BTree *)malloc(sizeof(BTree));
27     p->data = data;
28     p->leftTree = nullptr;
29     p->rightTree = nullptr;
30     father->leftTree = p;
31     return p;
32 }
33
34 /*添加右节点,并返回加入的右节点的地址*/
35 BTree*
36 addRight(BTree *father, char *data)
37 {
38     BTree *p = (BTree *)malloc(sizeof(BTree));
39     p->data = data;
40     p->leftTree = nullptr;
41     p->rightTree = nullptr;
42     father->rightTree = p;
43     return p;
44 }
45
46 /*打印出所有节点的数据*/
47 void
48 printOut(BTree *root)
49 {
50     if (root)
51         std::cout << root->data << std::endl;
52     else
53         return;
54     if (root->leftTree)
55     {
56         printOut(root->leftTree);
57     }
58     if (root->rightTree)
59     {
60         printOut(root->rightTree);
61     }
62 }
63
64 int main(void)
65 {
66     BTree *root = nullptr;
67     BTree *left = nullptr;
68     BTree *right = nullptr;
69     root = initRoot("root");
70     left=addLeft(root, "left");
71     right=addRight(root, "right");
72     addLeft(left, "A");
73     addRight(left, "B");
74     addLeft(right, "C");
75     addRight(right, "D");
76     printOut(root);
77     system("pause");
78     return 0;
79 }

打印操作没有进行严格测试,如果读者发现错误希望不吝赐教,不胜感激。

以上。

时间: 2024-10-12 23:07:08

二叉树的基本结构与实现的相关文章

(数据结构第六章)二叉树的顺序存储结构

二叉树的五条性质: 1.在二叉树的第i层上至多有2^(i-1)个节点(i>=1) 2.深度为k的二叉树至多有2^k-1个节点(k>=1) 3.对任何一个二叉树T,如果其终端节点数为n0,度为2的节点数为n2,则n0=n2+1. 证:总结点数n=n0+n1+n2 设分支总数B,n=B+1 B=n1+n2:两式加减即证出. 补充个定义:节点拥有的子树数称为节点的度. 树的度是树内各节点度的最大值. 4.具有n个节点的完全二叉树的深度为floor(log(2)n)+1 5.如果对一颗有n个节点的完全

二叉树的存储结构

二叉树的存储结构有两种:顺序存储结构和链式存储结构. 顺序存储结构 对于满二叉树和完全二叉树来说,可以将其数据元素逐层存放到一组连续的存储单元中,如图6-3 所示.用一维数组来实现顺序存储结构时,将二叉树中编号为i 的结点存放到数组中的第i 个分量中.如此根据性质6.7,可以得到结点i 的父结点.左右孩子结点分别存放在.2i 以及2i+1 ?i / 2? 分量中. 图6-3 顺序存储结构 这种存储方式对于满二叉树和完全二叉树是非常合适也是高效方便的.因为满二叉树和完全二叉树采用顺序存储结构既不浪

数据结构--树(上)-- 二叉树及存储结构

二叉树及存储结构 二叉树的定义:一个有穷的结点集合.若不为空,则它是由根节点和称为其左子树和右子树的两个不想交的二叉树组成 一般的左右的树是没有左右之分的.二叉树有左右之分. 三种特殊的二叉树 斜二叉树         实质就可以是链表了. 完美二叉树 完全二叉树 二叉树的几个重要的性质 二叉树的抽象数据类型 对二叉树来讲,最重要的就是Traversal() 遍历,讲二叉树基本就讲遍历了. 二叉树的存储结构 顺序存储结构 顺序存储结构 可以存储完全二叉树:从上往下,从左往右,来进行便利.把这种树

二叉树及存储结构

本文的结构: 二叉树的基本形态 二叉树的重要性质 二叉树的抽象数据类型定义 二叉树的存储结构 二叉树T:一个有穷的节点集合.这个集合可以为空,若不为空,则它是由根节点和称为其左子树TL和右子树TR的两个不相交的二叉树组成 二叉树的五种基本形态: (a) 空树 (b) 有一个结点 (c) 右子树为空 (d) 左子树为空 (e) 有左右子树 二叉树的重要性质: 一个二叉树第i层的最大节点数为:2i-1,i >=1; 深度为k的二叉树有最大结点总数为 2k-1,k>=1: 对任何非空二叉树T,若n0

数据结构(二十二)二叉树的顺序存储结构

一.顺序存储结构对数这种一对多的关系结构实现起来是比较困难的.但是二叉树是一种特殊的树,由于它的特殊性,使得用顺序存储结构也可以实现. 二.二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,比如双亲与孩子的关系,左右兄弟的关系等. 三.完全二叉树可以将相应下标的结点存到数组的相应下标的位置上,对于一般的二叉树来说,完全可以将其按完全二叉树编号,只不过,把不存在的结点设置为"null"而已.这显然是对存储空间的浪费,所以

树1-2、二叉树及存储结构

二叉树的定义: 二叉树的重要性质: 二叉树的存储结构:用数组存储完全二叉树 二叉树的存储结构:用链表存储 原文地址:https://www.cnblogs.com/maider/p/11362237.html

二叉树的顺序存储结构

/* * 2015年4月19日 16:44:48 * 目的:用顺序存储结构来表示二叉树 * 二叉树比较难,所以更应该同过程序来好好理解二叉树的概念. * 顺序存储是顺序储存在数组中的,以完全二叉树的形式,不存在的结点 * 在数组中用0表示.当二叉树是完全二叉树时,效率高而且简单 * 但是当不是完全二叉树时,会出现内存浪费的情况,这个程序仅仅 * 用来说明顺序结构怎么存储二叉树的,而且一般二叉树不会用顺序结构,缺点明显 */ # include <stdio.h> # define MAXSIZ

二叉树的顺序结构

#include "stdio.h" #include "stdlib.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 /* 存储空间初始分配量 */ #define MAX_TREE_SIZE 100 /* 二叉树的最大结点数 */ ty

【数据结构】二叉树链式结构--遍历二叉树

树是n(n>=0)个结点的有限集. 在任一颗非空数中: 1)有且仅有一个根节点 2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每一个集合也是一颗树,并且成为根的子树. 二叉树:n个结点的有限集合,该集合或者为空集(空),或者由一个根节点和两棵互不相交的.分别称为根结点的左子树和右子树的二叉树组成. 二叉树每个结点最多有两个孩子,所以为它设计一个数据域和两个指针域,我们称这样的链表为二叉链表. 代码: #include "string.h" #inc