数据结构(C语言版)严蔚敏(树二叉树的相关概念笔记)

Posted 坚持不懈的大白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C语言版)严蔚敏(树二叉树的相关概念笔记)相关的知识,希望对你有一定的参考价值。

数据结构(C语言版)严蔚敏(树的相关概念笔记)

1. 树中一个节点的孩子个数称为该节点的度,树中节点的最大度数称为树的度;
2. 度大于0的节点称为【分支节点】(非终端节点),度为0的节点称为【叶子节点】(也称终端节点);
3. 节点的层次从根节点算起,根节点为第一层,他的子节点为第二层,依次类推。【节点的深度】是从根节点开始自顶向下累加的。【节点的高度】是从叶子节点开始自底向上逐层累加的。【树的高度(深度)】是树中节点的最大层数;
4. 【有序树和无序树】树中节点的各个子树从左至右是有次序的,不能互换,称该树为有序树,否则称为无序树;
5. 【路径和路径长度】树中两个节点之间的路径指的是由这两个节点之间所经过的节点序列构成的,而路径的长度指的是路径上所经过的的个数。

树的性质
1. 树中的节点数等于所有节点的度数加1
2. 度为m的树中第i层至多由m^(i-1)个节点
3. 高度为h的m叉树至多有(m^k-1)/(m-1)个节点
4. 具有n个节点m叉树最小高度为[log m (n(m-1)+1)]再向上取整


1. 二叉树中序遍历的非递归实现

访问过程:
需要借助一个【栈】。

  1. 沿着根的左孩子,依次入栈,直到左孩子为空,说明已经找到可以输出的结点。
  2. 栈顶元素出栈并访问;若其右孩子为空,继续执行2步骤;若其右孩子不为空,将右子树转执行1步骤。

参考代码:

void InOrder2(BiTree T)
	Stack S;
	InitStack(S);
	BiTree p=T;
	while(p||!IsEmpty(S))
		if(p)
			Push(S,p);
			// 当前节点入栈
			p = p->lchild;
		else
			Pop(S,p);
			visit(p);
			p = p->rchild;
			
	

2. 二叉树先序遍历的非递归实现

先序遍历只需把访问节点操作放在入栈操作的前面(相比较中序遍历)。

void PreOrder2(BiTree T)
	Stack S;
	InitStack(S);
	BiTree p=T;
	while(p||!IsEmpty(S))
		if(p)
			visit(p);
			Push(S,p);
			// 当前节点入栈
			p = p->lchild;
		else
			Pop(S,p);
			p = p->rchild;
			
	

以上是关于数据结构(C语言版)严蔚敏(树二叉树的相关概念笔记)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构(C语言版)严蔚敏---二叉树遍历操作二叉树的相关代码

数据结构(C语言版)严蔚敏---二叉树遍历操作二叉树的相关代码

数据结构(C语言版)严蔚敏(树的相关概念笔记)

数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序中序后序层次)和线索二叉树

数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序中序后序层次)和线索二叉树

数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序中序后序层次)和线索二叉树