二叉樹作為最常見以及最常用的的結構,其特點是對於每乙個父節點,最多包含兩個節點,因此對於乙個二叉樹,可以將其分為三個部分,根節點,左子樹和右子樹。一般來說,儲存結構分為線性儲存結構和鏈式儲存結構。線性儲存結構一般來說是以陣列的方式呈現的,其特點是在記憶體中表現為連續的空間分配。而對於鏈式儲存結構,在邏輯上是有種某種關係,比如邏輯連續,但是在實際物理的記憶體空間上的分配上,卻沒有任何的規律。對於二叉樹而言,一般來說對於滿二叉樹概念下的完全二叉樹,有的時候,很多父節點並沒有含有孩子節點,這個時候採用線性儲存結構,就會大大的浪費儲存空間,當資料量很大的時候,這個時候記憶體空間就會有很大的浪費,導致記憶體不足,這個時候採用鏈式儲存結構就會大大的節約儲存空間。
如圖,對於滿二叉樹而言,其每乙個父節點,都含有兩個孩子節點,同時也可以得出,對於層次為n的滿二叉樹,其還有的節點個數一定為2^n-1。例如上圖,層次為4,其節點數為15。(ps:最後的葉子節點15和16的節點標號應該為14,15)。
對應到完全二叉樹的概念,其節點的標號在每一層對應於滿二叉樹,即雖然完全二叉樹並沒有滿二叉樹那麼多的節點,但是其每一層的孩子節點的表示和滿二叉樹節點是一一對應的。對比圖(a)和圖(b),即可理解這一概念。
對二叉樹的遍歷,實際上就是通過某種遍歷方式,將二叉樹的節點進行訪問。由於二叉樹的邏輯結構的特徵,並不能像陣列或者vector,棧或者佇列那麼簡單的對元素進行訪問,需要根據其結構,即父子節點最多含有兩個子節點這一特徵進行訪問。一般而言,遍歷的方法有先序遍歷,中序遍歷、後序遍歷以及層次遍歷。
先序遍歷是通過先訪問父子節點,然後訪問左子樹,然後訪問右子樹完成遍歷。
對於上圖來說,先序遍歷的結果為:gdafemhz
中序遍歷,首先訪問的是左子樹,後訪問其父節點,然後訪問其右節點。
對於上圖而言,中序遍歷的結果為:adefghmz
後序遍歷,首先訪問的是左子樹,後訪問對應的右子樹,然後方位父節點。
對於上圖而言,後序遍歷的結果為:aefdhzmg
層序遍歷,就是二叉樹的邏輯圖是咋樣的,遍歷就是咋樣的。
對於上圖而言,層次遍歷的結果:gdmafhze
二叉樹的建立:
比較簡單的容易理解的方法就是按照程式遍歷的方法構建二叉樹。實現的過程:
templateclass binarytree;
templateclass treenode
;templatetreenode::treenode()
templateclass binarytree
;
//create binarytree by level
templatetreenode* binarytree::createbinarytree(vectordatainput)
nindex++;
if(nindex*rightnode=new treenode;
rightnode->data=datainput[nindex];
p->right=rightnode;
temp.push(rightnode);
}nindex++;
}return root;
}
templatevoid binarytree::visit(treenode*node)
templatevoid binarytree::preorder()
templatevoid binarytree::preorder(treenode*node)
}templatevoid binarytree::inorder()
templatevoid binarytree::inorder(treenode*node)
}templatevoid binarytree::postorder()
templatevoid binarytree::postorder(treenode*node)
}templatevoid binarytree::levelorder()
}
具體的結果為:
mysql 遍歷二叉樹 資料結構 二叉樹遍歷
這篇博文主要是研究二叉樹遍歷的遞迴與非遞迴演算法,有興趣的小夥伴可以了解下!二叉樹的遞迴遍歷 深度優先遍歷 先來張圖,看看各結點遍歷時的情況 二叉樹深度優先遍歷總結 分別為第一次,第二次,第三次進入某個結點 先序遍歷 先訪問根結點,然後先序遍歷左子樹,最後先序遍歷右子樹 根 左 右 中序遍歷 先中序...
資料結構 遍歷二叉樹
資料結構實驗之二叉樹二 遍歷二叉樹 time limit 1000ms memory limit 65536kb submit statistic problem description 已知二叉樹的乙個按先序遍歷輸入的字串行,如abc,de,g,f,其中,表示空結點 請建立二叉樹並按中序和後序的方...
資料結構 遍歷二叉樹
二叉樹的遍歷原理 二叉樹的遍歷是指從根節點出發,按照某種次序以此訪問二叉樹所有節點,使得每個節點被訪問一次且僅被訪問一次 二叉樹遍歷方法 1.前序遍歷 規則是若二叉樹為空,則空操作返回,否則先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹 2.中序遍歷 規則是若樹為空,則空操作返回,否則從根節點開...