挑战二--第八章树

版权声明:随便写写,也不重要,欢迎挑错讨论 https://blog.csdn.net/qq_37305947/article/details/80010585

树是一种用于表达层级结构的数据结构。

树结构是实现高效算法与数据结构的基础,是信息处理与程序设计中不可欠缺的概念。

—————————————————————————————————————————————————————

第八章大概在两周前就看完了(真的还是“看”完了,到底理解了没有,记住了没有还真的不知道。。。)然后现在翻回来复习总结一下吧。。。。

—————————————————————————————————————————————————————

有根树的表达:

“左子右兄弟表示法”表示树。

struct Node{
	int parent,left,right;
}T[MAX]; 
//或者 
int parent[MAX],left[MAX],right[MAX];

引用u.parent即可知道各节点的父结点。子结点,兄弟结点同理。

不存在父结点就是根。不存在u.left就是叶子结点。不存在u.right就是最右侧子结点。

----

求各结点的深度(递归)

setDepth(u,p){
	D[u]=p;
	if T[u].right!=NIL
		setDepth(T[u].right,p)
	if T[u].left!=NIL 
		setDepth(T[u].left,p+1)
}

“左子右兄弟”如果右结点不空有兄弟则不改变深度直接调用,如果左结点不空则深度加一调用。

——————————————————————————————————————————————————————————————————————————————————————————————————————————


二叉树的表达

大致同上。。


——————————————————————————————————————————————————————————————————————————————————————————————————————————


树的遍历

Pregram(前序)、Inordor(中序)、Postorder(后序) 遍历均为递归遍历。

算法时间复杂度O(n)

pregram遍历

pregram (u){
	if u==NIL
		return 
	print u
	pregram(T[u].left)
	pregram(T[u].right)
}

Inorder遍历

Inorder (u){
	if u==NIL
		return 
	Inorder(T[u].left)
	print u
	Inorder(T[u].right)
}

postorder遍历

postorder(u){
	if u==NIL
		return 
	postorder(T[u].left)
	postorder(T[u].right)
	print u
}

——————————————————————————————————————————————————————————————————————————————————————————————————————————

树的重建

(已知树的前序遍历和中序遍历求树的后序遍历)

。。。。。讲不清楚啊 。。但是树上说的超清楚啊。。。

(对着书打一遍吧。。。。)

首先按前序遍历的顺序依次访问各结点。访问过程中,我们通过中序遍历得知各子树内中序遍历的顺序。从而重建以当前结点c为根的左右子树

也就是说,设前序遍历的当前结点为c,c在中序遍历中的位置是m,m左侧就是c的左子树,右侧就是右子树,然后同理递归



。说是总结,其实并不算总结,只能说是抄书。。要说会了么,只能说懂了,并不能算是会。。说是刷书其实也只是抄书。。。。

没办法,感觉确实是智商不够然后做的所有的东西都是很机械的重复性工作,很难去举一反三。。emm然后就是,没有了。既然决定刷书写博客做总结,就算是抄,我也要抄完的。。。


还有就是。。还有40多天吧,其实没有40多天就是40天了吧。就是邀请赛。。花钱买资格,还不一定买的到。。没办法。。很菜很需要提高。喝个鸡汤:起点越低,进步越大。


猜你喜欢

转载自blog.csdn.net/qq_37305947/article/details/80010585