树的基本知识

表示法:1. 树形 2. 文氏图 3. 凹入 4. 括号

结点的度与树的度 m次树: 结点子树的个数

非终端节点,分支结点,叶节点

路径与路径长度: ki,ki1,ki2,…,kj, 结点数目减1(分支数目)

孩子结点,双亲结点,兄弟结点

结点的层次和树的高度:根节点为第一层,树的高度。

森林: n(n 0) 个互不相交的树的集合,n可以为1?

树中的结点数等于所有结点的度数加 1
度为 m 的树中第 i 层上至多有 m (i-1) 个结点 , 这里应有 i 1

性质1 非空二叉树上叶结点数等于双分支结点数加1。
      证明:设二叉树上叶结点数为n0,单分支结点数为n1,双分支结点数为n2,则总结点数=n0+n1+n2。在一棵二叉树中,所有结点的分支数(即度数)应等于单分支结点数加上双分支结点数的2倍,即总的分支数=n1+2n2。
    由于二叉树中除根结点以外,每个结点都有惟一的一个分支指向它,因此二叉树中有:总的分支数=总结点数-1。
    由上述三个等式可得:n1+2n2=n0+n1+n2-1
即:n0=n2+1

转换 以后来。


void LevelOrder(BTNode* tree)
{
	BTNode* queue[100];
	int front, rear;
	front = rear = -1;

	++rear;
	queue[rear] = tree;

	BTNode* tmp = NULL;
	while (front != rear)
	{
		front = (front + 1) % 100;
		cout << queue[front]->Data;


		tmp = queue[front];
		if (tmp->LChild != NULL)
		{
			rear = (rear + 1) % 100;
			queue[rear] = tmp->LChild;
		}

		if (tmp->RChild != NULL)
		{
			rear = (rear + 1) % 100;
			queue[rear] = tmp->RChild;
		}
	}
}
// 二叉树的基本运算
void CreateBTNode(BTNode* tree, string* str);
BTNode* FindNode(BTNode* tree, char x);
BTNode* (BTNode* p); BTNode* RChildNode(BTNode* p);
int BTNodeDepth(BTNode* tree);
void DispBTNode(BTNode* tree);

//在指定树中查找指定树节点的层次。
int Level(const BTNode* Tree, const BTNode* Node)
{
	if (Tree == NULL)
	{
		return 0;
	}
	else if (Tree == Node)
	{
		return 1;
	}
	else
	{
		if (Level(Tree->LChild, Node))
		{
			return Level(Tree->LChild, Node) + 1;
		}
		else if (Level(Tree->RChild, Node))
		{
			return Level(Tree->RChild, Node) + 1;
		}
		else
		{
			return 0;
		}

	}

}

void Level(const BTNode* tree, const BTNode* Node, int &h, int lh) //lh: lasthigh.
{
	if (tree == NULL)
	{
		h = 0;
	}
	else if (tree == Node)
	{
		h = lh + 1;
	}
	else
	{
		Level(tree->LChild, Node, h, lh + 1);
		if (h == 0)
		{
			Level(tree->RChild, Node, h, lh + 1);
		}
	}
}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NOIP(全国信息学奥林匹克竞赛)是中国的一项信息学竞赛活动,旨在选拔和培养优秀的计算机程序设计人才。是NOIP的一个基础知识点,具体内容如下: 是一种非线性的数据结构,由n(n>=0)个节点组成,节点之间通过有限数量的边连接起来。的特点是:每个节点(除根节点外)只有一个父节点,而可以有多个子节点。根节点是的起始节点,没有父节点。中的每个节点都有一个值,可以存储任意类型的数据。 可以用于解决各种计算机问题,例如构建文件系统、网络路由等。在NOIP竞赛中,常常用于解决图论、动态规划等算法问题。 的常见概念包括: 1. 节点:的基本元,包含值和指向子节点的指针。 2. 根节点:的起始节点,没有父节点。 3. 叶节点:没有子节点的节点。 4. 父节点:某个节点直接指向当前节点的节点。 5. 子节点:当前节点直接指向的节点。 6. 的高度:中从根节点到最远叶节点的边的数量。也可以定义为最深叶节点的层数加一。 7. 子中的一个节点及其所有子节点组成的。 在解决NOIP问题时,我们需要掌握的遍历方法,包括: 1. 先序遍历:先访问根节点,然后按先序遍历的顺序递归访问左子和右子。 2. 中序遍历:先递归访问左子,然后访问根节点,最后递归访问右子。 3. 后序遍历:先递归访问左子,然后递归访问右子,最后访问根节点。 此外,我们还需要了解的相关算法和数据结构,如二叉、二叉搜索、平衡、堆等。这些的变种在NOIP竞赛中也经常出现。 总之,是NOIP竞赛的一个基础知识点,掌握的概念、特点、遍历方法以及相关算法和数据结构,对于解决竞赛中的问题非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值