树和二叉树

目录

树的定义:

树的概念:

二叉树

二叉树的定义:

二叉树的性质:

遍历二叉树

先序遍历

 中序遍历

后序遍历

树的定义:

树是有n(n>=0)个节点的有限集,有空树(n=0)和非空树。
对于非空树来说,它有且仅有一个称之为根的节点;除了根节点外的其余节点可分为多个互不相交的有限集T1,T2,T3……,Tm,其中每一个集合本身又是一棵树,称为根的子树。

树的概念:

树和二叉树_第1张图片
1.节点:树中的一个独立单元。如图中的A、B、C等。
2.节点的度:节点拥有子树的个数。如A有2个度,D有3个度。
3.树的度:树中最大的节点的度即为树的度。如图中树的度为D节点的度为3
4.叶子:度为0的节点称为叶子或终端节点。如图中的G,H,I,J,F。
5.非终端节点:度不为0的节点称为非终端节点或分支节点。除根节点外,非终端节点也称为内部节点
6.双亲和孩子:某节点的子结点称为该节点的孩子;该节点称为孩子的双亲。
7.兄弟:同一个双亲的孩子节点称为兄弟。如E和F是兄弟。
8.祖先:从根到该节点的双亲所经过的所有节点称为该节点的祖先。如J的祖先为A,C,E。
9.子孙:某节点的子树上任意一个节点都为该节点的子孙。如C的子孙E,F,J。
10.层次:从根节点开始定义,根节点为第一层,树中任一节点层次为其双亲层次加1。
11.树的深度:树的深度为树中节点的最大层次
12.有序树和无序树:如果树中节点的各子树看成从左至右是有次序的不能互换,则称该树为有序树,否则称为无序树。

二叉树

二叉树的定义:

二叉树是有n(n>=0)个节点的有限集,有空树(n=0)和非空树。
对于非空树来说,它有且仅有一个称之为根的节点;除了根节点外的其余节点可分为两个互不相交的子集T1和T2,分别称为T的左子树和右子树,且T1和T2本身也是二叉树

二叉树与树的区别:

1.二叉树的每个节点至多只有两颗子树
2.二叉树是有序树,有左右子树之分

二叉树的性质:

1.在二叉树的第i层上至多有2^(i-1)个节点
2.深度为k的二叉树至多有2^k-1个节点,最少有k个节点
3.对任意一颗二叉树T,如果其终端节点树为n0,度为2的节点数为n2,则n0=n2+1
原因:一颗二叉树有n个节点,度为0的节点为n0个,度为1的节点为n1个,度为2的节点为n2个,有x个分支。则(式一)n=n0+n1+n2;(式二)n=x+1;(式三)x=n1+2*n2,由一,二,三式可得(式四)n=n1+2*n2+1,由一,四式可得n0=n2+1
4.满二叉树:深度为k且含有2^k-1个节点的二叉树
5.完全二叉树:深度为k且含有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中的节点编号一致时,称为完全二叉树
特点:对深度为k的完全二叉树来说
        1.叶子节点仅出现在第k和第k-1层
        2.对于任一节点,若其右分支的最大层次为L,则其左分支的最大层次必为L或L+1。
树和二叉树_第2张图片树和二叉树_第3张图片
                            满二叉树                                                      完全二叉树

遍历二叉树

先序遍历

先序遍历(PreOrder) 的操作过程如下:
1)访问根结点;
2)先序遍历左子树;
3)先序遍历右子树。

void PreOrder(BiTree T){
	if(T){
		printf("%c",T->data);	//访问根节点
		PreOrder(T->lchild);	//递归遍历左子树
		PreOrder(T->rchild);	//递归遍历右子树
	}
}

 中序遍历

中序遍历( InOrder)的操作过程如下:
1)中序遍历左子树;
2)访问根结点;
3)中序遍历右子树。

void InOrder(BiTree T){
	if(T){
		InOrder(T->lchild);	    //递归遍历左子树
		printf("%c",T->data);	//访问根结点
		InOrder(T->rchild);	    //递归遍历右子树
	}
}

后序遍历

后序遍历(PostOrder) 的操作过程如下:
1)后序遍历左子树;
2)后序遍历右子树;
3)访问根结点。

void PostOrder(BiTree T){
	if(T){
		PostOrder(T->lchild);	//递归遍历左子树
		PostOrder(T->rchild);	//递归遍历右子树
		printf("%c",T->data);	//访问根结点
	}
}

以图为例:体验三种遍历的不同

树和二叉树_第4张图片

先序遍历:A->B->C->D->E->F->G->H

T->data T->lchild T->rchild

中序遍历:B->D->C->E->A->F->H->G

T->lchild T->data T->rchild

后序遍历:D->E->C->B->H->G->F->A
 

T->lchild T->rchild T->data

以表格所示的顺序向下依次遍历得到不同遍历的结果。

你可能感兴趣的:(数据结构)