[数据结构][树]链表模拟二叉树及其基本操作 原创

A.注释

① 深刻理解二叉树的定义、性质及其存储方法;
② 熟练掌握二叉树的二叉链表存储方式、结点结构类型的定义;
③ 理解并掌握二叉树的三种遍历算法的递归实现及非递归实现;
④ 掌握二叉树的线索化方法;
⑤ 灵活运用二叉树遍历方法中递归实现的程序框架及应用(求总结点、叶子节点和二叉树深度)。(重点)
⑥ 深刻理解树的定义、术语;
⑦ 领会并掌握树的各种存储结构;
⑧ 熟练掌握森林与二叉树间的相互转换;
⑨ 领会树和森林的遍历;
⑩ 掌握哈夫曼树及哈夫曼编码。

1.定义

1.1Binary Tree

n(n>0) 个节点组成的集合,它或成为 空 树,或称为 非空树
对于非空树
有且仅有一个称之为 根(root) 的节点
其余节点 分为不相交的子集 T1 T2 分别成为 T 的 左子树 由子树 且本身都是二叉树

1.2与 树 的区别

每个节点至多两个子树
子树 油左右之分 次序不能任意颠倒

1.3性质

在 第i层 至多有 2^i-1 个结点 (i>=1)
深度为K的二叉树至多有2^K-1 个结点
对于任何一个二叉树T,如果终端节点数为n0,度为2的节点数为n2,则n0=n2+1

存储方法

链式

B.CPP代码

1.
刚才写成了
struct BiTree *lchild, *rchild;
}BiTNode,*BiTree;

于是就在 InOrderTraverze(BiTree T) 参数部分出错了 我不知道为啥 (笑

2.
我之前不知道为什么 有些 要用 void ?
我看void InOrderTraverze 的时候明白了 这他妈根本没有需要返回值判断错误的可能...


3.
void CreatBiTree(BiTree &T)
{
	//这里用的是 先序遍历方式 什么 你问什么是先序遍历?
	//就是把上面的cout和他上面一行换个位置

	char ch;
	cin >> ch;
	if (ch == '#') T = NULL; //空树
	else 
	{
		T = new	BiTNode;
		T->data = ch;
		CreatBiTree(T->lchild);
		CreatBiTree(T->rchild);
	}
}

太真实了 这个写法 想起DFS

4.
int NodeCount(BiTree T)
{
	if (!T) return 0;

	else return NodeCount(T->lchild) + NodeCount(T->rchild);
}

int petch(BiTree T)
{
	if (!T) return 0;

	else
	{
		int m = petch(T->lchild);
		int n = petch(T->rchild);
		if (m > n) return m + 1;
		else return n + 1;
	}
}

递归的性质太明显了 无处不在


5.
	//这一段书本上的代码出现了错误!
	//如果 T == NULL 返回 这样的话 NewT为空的情况将不会被复制!
	if (!T) return 0;

太喜剧了 让夏渝蛟帮忙找了半天

Status Copy(BiTree T, BiTree &NewT) 
{
	//这一段书本上的代码出现了错误!
	//如果 T == NULL 返回 这样的话 NewT为空的情况将不会被复制!
	if (!T)
	{
		NewT = NULL;
		return 0;
	}
	else
	{
		NewT = new BiTNode;
		NewT->data = T->data;
		Copy(T->lchild, NewT->lchild);
		Copy(T->rchild, NewT->rchild);
	}
}

C.编写日志

1.
刚才写成了
struct BiTree *lchild, *rchild;
}BiTNode,*BiTree;

于是就在 InOrderTraverze(BiTree T) 参数部分出错了 我不知道为啥 (笑

2.
我之前不知道为什么 有些 要用 void ?
我看void InOrderTraverze 的时候明白了 这他妈根本没有需要返回值判断错误的可能...


3.
void CreatBiTree(BiTree &T)
{
	//这里用的是 先序遍历方式 什么 你问什么是先序遍历?
	//就是把上面的cout和他上面一行换个位置

	char ch;
	cin >> ch;
	if (ch == '#') T = NULL; //空树
	else 
	{
		T = new	BiTNode;
		T->data = ch;
		CreatBiTree(T->lchild);
		CreatBiTree(T->rchild);
	}
}

太真实了 这个写法 想起DFS

4.
int NodeCount(BiTree T)
{
	if (!T) return 0;

	else return NodeCount(T->lchild) + NodeCount(T->rchild);
}

int petch(BiTree T)
{
	if (!T) return 0;

	else
	{
		int m = petch(T->lchild);
		int n = petch(T->rchild);
		if (m > n) return m + 1;
		else return n + 1;
	}
}

递归的性质太明显了 无处不在


5.
	//这一段书本上的代码出现了错误!
	//如果 T == NULL 返回 这样的话 NewT为空的情况将不会被复制!
	if (!T) return 0;

太喜剧了 让夏渝蛟帮忙找了半天

Status Copy(BiTree T, BiTree &NewT) 
{
	//这一段书本上的代码出现了错误!
	//如果 T == NULL 返回 这样的话 NewT为空的情况将不会被复制!
	if (!T)
	{
		NewT = NULL;
		return 0;
	}
	else
	{
		NewT = new BiTNode;
		NewT->data = T->data;
		Copy(T->lchild, NewT->lchild);
		Copy(T->rchild, NewT->rchild);
	}
}

posted @   俺叫西西弗斯  阅读(0)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示