完全二叉树最小深度_树与二叉树递归c++
樹(Tree)
1.什么是樹?
樹是n個結點的有限集合。
當n=0時,稱為空樹。而任意非空樹應滿足:
a.有且僅有一個特定的根結點。如“E”是該樹的根結點。
b.當n>1時,其余結點可分為m(m>0)個互不相交的有限集合。其中每一個集合本身又是一棵樹,稱為根結點的子樹。如“A”是一棵子樹。
*注:n個結點的樹有n-1條邊。
2.樹的其他概念
1.二叉樹(binary Tree)
1.什么是二叉樹?
二叉樹(binary tree)T是有限個元素的集合(可以為空)。當二叉樹非空時,其中有一個元素稱為根,余下的元素(如果有的話)被劃分成兩棵二叉樹,分別稱為t的左子樹和右子樹。
a.二叉樹的每個元素都恰好有兩棵子樹(其中一個或兩個可能為空)。
b.二叉樹中的每個元素的子樹都是有序的,也就是說,有左子樹和右子樹之分。
2.二叉樹的五種形態:
二叉樹一共有五種基本形態。
(1)空二叉樹。 (2)只有一個根結點。 (3)根結點只有左子樹。 (4)根結點只有右子樹。 (5)根結點既有有左子樹又有右子樹。3.特殊二叉樹
a.斜樹:所有的結點都只有左子樹的二叉樹叫左斜樹,反之就是右斜樹。 b.滿二叉樹:除最后一層無任何子結點外,每一層上的所有結點都有兩個子結點的二叉樹。 c.完全二叉樹: 若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。*注:滿二叉樹一定是完全二叉樹,但完全二叉樹不一定是滿二叉樹。
4.二叉樹的性質
性質5.二叉樹的存儲
A.順序存儲
用數組來存儲,對于二叉樹,如果節點X存儲在數組中的下標為i,那么它的左子節點的存儲下標為2*i,右子節點的下標為2*i+1,反過來,下標i/2位置存儲的就是該節點的父節點。
缺點:如果不是按完全二叉樹的性質存儲就容易浪費存儲空間。
B.鏈式存儲
每個節點由3個字段,其中一個存儲數據,另外兩個是指向左右子結點的指針。我們只要拎住根節點,就可以通過左右子節點的指針,把整棵樹都串起來。這種存儲方式比較常用,大部分二叉樹代碼都是通過這種方式實現的。
二叉樹的遍歷(遞歸)
遍歷是對樹的一種最基本的運算,所謂遍歷二叉樹,就是按一定的規則和順序走遍二叉樹的所有結點,使每一個結點都被訪問一次,而且只被訪問一次。由于二叉樹是非線性結構,因此,樹的遍歷實質上是將二叉樹的各個結點轉換成為一個線性序列來表示。
深度優先搜索1.三種遍歷的代碼:
3.構造樹的結構圖
以上的代碼只實現了TreeNode.h和Traversal_recursion.h的頭文件。
在后面會以力扣為模型,實現法迭代版二叉樹及全部方。
代碼:
https://gitee.com/yaoshanxia/data-structure-and-algorithm/tree/master/Tree
總結
以上是生活随笔為你收集整理的完全二叉树最小深度_树与二叉树递归c++的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 调整了canvas的高度页面变化后还原_
- 下一篇: mvc中ajax的跳转,springmv