c语言树详解

完全二叉树是一种特殊的二叉树。

定义:如果一棵深度为k,节点数为n的二叉树,在深度为k的全二叉树中,每个节点与从1到n编号的节点一一对应,则称此二叉树为完全二叉树。

示例:

特点:

叶节点只能出现在两个最大的级别上。对于任何节点,如果其右分支下的后代最大级别为L,则其左分支下的后代最大级别必须为L或L 1。

一棵完全二叉树的I级最多有2 (I-1)个节点,I级完全二叉树最多有2个I-1个节点。

全二叉树:一种二叉树,其中每一层上的所有节点都有两个子节点,除了最后一层没有任何子节点。

C语言二叉树中“度”为0,1,2是什么意思? 根只有一个,没有孩子的二叉树的度为0,所有节点只有一个孩子的二叉树的度为1,节点有两个孩子的二叉树的度为2。

在一棵树所包含的节点中,分枝数最多的就是树的度。二叉树的度小于等于2,因为二叉树的定义要求二叉树中任意一个节点的度(节点的分支数)小于等于2,且两个子树有左右分支,顺序不能颠倒。

扩展数据:

二叉树的叶节点计算方法:

举例:如果一棵树的度为4,度为1、2、3、4的节点数分别为4、2、1、1,那么这棵树的叶节点数是多少?

解:因为任意一棵树的节点总数=度*这个度对应的节点数是1,所以:

n0 4 2 1 1 = (0*n0 1*4 2*2 3*1 4*1) 1

那么:n0=8

其中:n0表示叶节点。

什么是计算机C语言中的二叉树 在计算机科学中,二叉树是一个有序的树,每个节点最多有两个子树。通常子树的根称为“左子树”和“右子树”。二叉树通常被用作二分搜索法树和二进制堆或二进制排序树。

二叉树的每个节点最多有两个子树(没有度数大于2的节点),二叉树的子树分左右,顺序不能颠倒。二叉树的第一层最多有2个节点的i -1次方;深度为k的二叉树最多有2^(k)1个节点;对于任意二叉树T,如果终端节点数(即叶子节点数)为n0,度为2的节点数为n2,则n0 = N2 ^ 1。

树是一个或多个节点的有限集合,其中:

1.必须有一个名为ROOT的特定节点;二叉树

3.剩余的节点被分成n=0个不相交的集合T1,T2,...每一组都是一棵树。树T1,T2,...Tn被称为根的子树。

树的递归定义如下:(1)至少有一个节点(称为根);(2)其他的是不相交的子树。

1.一棵树的度,也就是宽度,简单来说就是一个节点的分支数。取组成树的节点中最大的度作为树的度,如上图所示的树,其度为2;树中度数为零的节点称为叶节点或终端节点。树中适度非零的节点称为分支节点或非终端节点。除了根节点以外的分支节点统称为内部节点。

2.树的深度——树的每个节点的最高级别。

3.森林——指的是几棵互不相交的树的集合。如上图所示,如果去掉根节点A,原来的两个子树T1,T2和T3 {T1,T2,T3}的集合就是森林;

4.有序树——指树中同一级别的节点从左到右有序排列,它们之间的顺序不能互换。这样的树称为有序树,否则称为无序树。

C语言中二叉树的深度是什么意思?怎么问? 从根节点到叶节点的节点一次形成树的一条路径,最长路径的长度就是树的深度。根节点的深度是1。

解体思路:

1.如果根节点为空,深度为0,返回0,这是递归的出口。

2.如果根节点不为空,那么深度至少为1,然后我们求出它们左右子树的深度。

3.比较左右两个子树的深度值,并返回较大的一个。

4.通过递归调用

#includeiostream

#includestdlib.h

使用命名空间std

结构BinaryTreeNode

{

int m _ nValue

BinaryTreeNode * m _ pLeft

BinaryTreeNode * m _ pRight

};

//创建一个二叉树节点

BinaryTreeNode * CreateBinaryTreeNode(int值)

{

binary treenode * pNode = new binary treenode();

pNode-m _ nValue = value;

pNode-m _ pLeft = NULL;

pNode-m _ p right = NULL;

返回pNode

}

//连接二叉树节点

void ConnectTreeNodes(binary treenode * p parent,BinaryTreeNode* pLeft,BinaryTreeNode* pRight)

{

如果(pParent!=空)

{

p parent-m _ pLeft = pLeft;

p parent-m _ p right = p right;

}

}

//求二叉树的深度

int tree depth(binary treenode * root)//计算二叉树的深度。

{

If(prowt = = NULL)//如果prowt为NULL,则深度为0,这也是递归返回条件。

返回0;

//如果pRoot不为NULL,那么深度至少为1,所以left和right=1。

int left = 1;

int right = 1;

left = tree depth(pRoot-m _ pLeft);//找到左边子树的深度

right = tree depth(pRoot-m _ p right);//找到右边子树的深度

向左向右返回?左:右;//返回深度更大的那个。

}

void main()

{

// 1

// / \

// 2 3

// /\ \

// 4 5 6

// /

// 7

//创建一个树节点

BinaryTreeNode * pnode 1 = CreateBinaryTreeNode(1);

BinaryTreeNode * pnode 2 = CreateBinaryTreeNode(2);

BinaryTreeNode * pnode 3 = CreateBinaryTreeNode(3);

BinaryTreeNode * pnode 4 = CreateBinaryTreeNode(4);

BinaryTreeNode * pnode 5 = CreateBinaryTreeNode(5);

BinaryTreeNode * pnode 6 = CreateBinaryTreeNode(6);

BinaryTreeNode * pnode 7 = CreateBinaryTreeNode(7);

//连接树节点

ConnectTreeNodes(pNode1,pNode2,pnode 3);

ConnectTreeNodes(pNode2,pNode4,pnode 5);

ConnectTreeNodes(pNode3,NULL,pnode 6);

ConnectTreeNodes(pNode5,pNode7,NULL);

int depth = tree depth(pnode 1);

coutdepthendl

系统(“暂停”);

}

来源:

“树”在c语言中是什么意思,set和编程有什么关系? 一棵树相当于一个图,有很多顶点和很多连接顶点的边。

编程可以和你能想象到的任何东西有关。集合在数据结构中有很大的关系,比如结构就是集合。

堆是一种数据结构,在堆排序算法中经常用到。

数据结构C语言:如何构造树 首先确定存储结构,比如是用父母还是孩子的兄弟姐妹还是孩子的链表来表示。

然后根据这个存储结构规则,输入树中的所有边(节点的关系),就可以构造树了。

相关文章

发表新评论