6.1树的定义、基本术语

  • 前面介绍的都是线性结构(顺序表、链表、串、队列、数组、广义表…),下面开始介绍树形结构

在这里插入图片描述

  • :任意一颗非空树中有且仅有一个根(结点),如 (a) 中的 A ,(b) 中的 A
    子树:(b) 中 T1 = {B, E, F, K, L },T2 = {C, G},T3 = {D, H, I, J, M}。T1,T2 和T3 本身又是树,称为根 A 的子树。以此类推,{E, K, L }FB 的子树。就算是一个结点也可以是子树。
    结点:包含一个数据元素若干指向其子树的分支
    结点的度:一个结点拥有的子树数量。
    树的度:树中所有结点中度的最大值
    叶子结点 / 终端节点:度为 0 的结点。
    分支结点 / 非终端节点 / 内部结点:度不为 0 的结点。
    孩子 / 孩子结点一个结点子树的根结点称为该结点的孩子
    双亲 / 双亲结点一个结点他的孩子结点的双亲结点。
    兄弟 / 兄弟结点具有相同双亲的结点互为兄弟结点。
    祖先 / 祖先结点:从根结点该结点所路过的所有分支上的结点,如 M 的祖先为 A, D, H
    子孙 / 子孙结点:以某一结点为根的子树中,这个根下面的所有结点都是这个根的子孙。如 B 的子孙为 E, K, L, F
    层次:从根开始计数,根在第一层,根的孩子在第二层,…直到终端结点,每个结点都有对应的层次。
    堂兄弟双亲不同在同一层次的结点互为堂兄弟。
    树的深度 / 高度:树中结点的最大层次数。
    有序树 / 无序树:树中各结点的各子树从左到右是有次序的,不能互换,则为有序树。否则是无序树。
    森林:m(m>=0)棵不相交的树的集合。对于树中的每一个结点,其子树的集合就是森林。

  • 树、森林的递归定义
    任何一颗树都可以看作是一个二元组:Tree = ( root, F )
    root:根节点
    F:root 的 m(m>=0)棵子树的集合,也是森林。F = (T1, T2, … ,Tm)。其中 Ti = (ri, Fi) 又称为 root 的第 i 棵子树。

  • 树的相似
    两棵二叉树要么都是空,要么都不空,并且它们的各级的左右子树均是如此,那么称这两棵二叉树是相似的。

// 递归比较两棵二叉树是否相似,分别遍历两棵二叉树
Status SimilarTree(BiTree &T1, BiTree &T2)
{
	if(!T1)
	{
		// T1是空树
		if(!T2)
		{
			// T2也是空树
			return TRUE;
		}
		else
		{
			return FALSE;
		}
	}
	else
	{
		// T1是非空树
		if(!T2)
		{
			// T2也是非空树
			if(SimilarTree(T1->rchild, T2->lchild) 
					&& SimilarTree(T1->rchild, T2->rchild) )
			{
				return TRUE;
			}
			else
			{
				return FALSE;
			}
		}
	}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值