S5_笔记(树,二叉树)

“ Ctrl AC!一起 AC!”

目录

树的引子

概述

树与生活

查找概述

顺序查找

二分查找

树的概述

树的基本术语

 树的表示

 二叉树

概念及形态

二叉树的性质

 二叉树的抽象数据类型​

二叉树的储存结构

顺序存储:

 链表存储:

二叉树的遍历

1.先序的递归遍历:

 2.中序的递归遍历:

3.后序的递归遍历:

4.中序非递归遍历:

5.先序的非递归遍历:

6.后序的非递归遍历:

7.层序遍历:

树的应用实例

1.找叶子结点:

2.求树的高度:

 3.二元运算:

 4.三序知二序确定唯一树


树的引子

概述

树与生活

查找概述

顺序查找

二分查找

二分模板(更多模板见More model

 

树的概述

 

树的基本术语

 树的表示

 

 二叉树

概念及形态

二叉树的性质

 

 二叉树的抽象数据类型

二叉树的储存结构

顺序存储:

 链表存储:

 

 链表存储的代码描述:

typedef struct TreeNode* BinTree;
struct TreeNode{
	ElementType Data;
	BinTree Left;
	BinTree Right;
}

二叉树的遍历

1.先序的递归遍历:

 

代码描述:

void PreOrderTraversal(BinTree BT){
	if(BT){
		printf("%d",BT->Data);
		PreOrderTraversal(BT->Left);
		PreOrderTraversal(BT->Right);
	}
}

 2.中序的递归遍历:

 

代码描述:

void PreOrderTraversal(BinTree BT){
	if(BT){
		PreOrderTraversal(BT->Left);
		printf("%d",BT->Data);
		PreOrderTraversal(BT->Right);
	}
}

3.后序的递归遍历:

 

代码描述:

void PreOrderTraversal(BinTree BT){
	if(BT){
		PreOrderTraversal(BT->Left);
		PreOrderTraversal(BT->Right);
		printf("%d",BT->Data);
	}
}

4.中序非递归遍历:

 代码描述:

void InOrderTraversal(BinTree BT){
	BinTree T=BT;
	Stack S=CreatStack(MaxSize);
	while(T||!IsEmpty(S)){
		while(T){
			Push(S,T);
			T=T->Left;
		}
		if(!IsEmpty(S)){
			T=Pop(S);
			printf("%5d",T->Data);
			T=T->Right;
		}
	}
}

5.先序的非递归遍历:

void InOrderTraversal(BinTree BT){
	BinTree T=BT;
	Stack S=CreatStack(MaxSize);
	while(T||!IsEmpty(S)){
		while(T){
			printf("%5d",T->Data);
			Push(S,T);
			T=T->Left;
		}
		if(!IsEmpty(S)){
			T=Pop(S);
			T=T->Right;
		}
	}
}

6.后序的非递归遍历:

void Post_order(tree L){
	tree p=L;
	Stack s=CreateStack(MaxSize);
	Stack result=CreateStack(MaxSize);
	while(p||!IsEmpty(s)){
		while(p){
			push(s,p);
			push(result,p);			
			p=p->right;
		}
		if(!IsEmpty(s)){
			p=pop(s);
			p=p->left;
		}
	}
	while(!IsEmpty(result)){
		p=pop(result);
		printf("%5d",p->data);
	} 
}

7.层序遍历:

 代码描述:

void LevelOrderTraversal(BinTree BT){
	Queue Q; BinTree T;
	if(!BT) return;
	Q=CreatQueue(MaxSize);
	AddQ(Q,BT);
	While(!IsEmptyQ(Q)){
		T=DeleteQ(Q);
		printf("%d\n",T->Data);
		if(T->Left) AddQ(Q,T->Left);
		if(T->Right) AddQ(Q,T->Right);
	}
}

树的应用实例

1.找叶子结点:

2.求树的高度:

 3.二元运算:

 4.三序知二序确定唯一树

根据前中序或中后序遍历情况可求的唯一确定的二叉树。

感谢阅读!!!

“ Ctrl AC!一起 AC!”

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctrl AC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值