資料結構和演算法 二叉樹

2021-10-09 02:38:19 字數 2463 閱讀 3915

二叉樹:樹的每個節點最多只能有兩個子節點。

樹的效率:查詢節點的時間取決於這個節點所在的層數,每一層最多有2n-1個節點,總共n層共有2n-1個節點,那麼時間複雜度為o(logn),底數為2。

二叉搜尋樹要求:若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。

遍歷:

二叉樹的前、中、後序遍歷

前序遍歷

遞迴

public

void

preorderbt

(binarytree root)

非遞迴
/**

* 前序遍歷非遞迴方式實現

* 非遞迴實現思路:二叉樹遍歷的遞迴實現很簡單,也很容易理解,在進行非遞迴實現時,需要用到棧這種資料結構(為什麼是棧,不是別的資料結構)。

* 因為遞迴實現的過程就是程式自己在處理圧棧和彈棧,改用非遞迴實現時,用棧模擬系統的圧棧與彈棧,就可以了。

*/public list

preorderbt1

(binarytree root)

//左邊的節點都走完了,需要改變節點方向if(

!stack.

isempty()

)}return preorderresult;

}

中序遍歷

遞迴

public

void

inorderbt

(binarytree root)

非遞迴
/**

* 中序遍歷的非遞迴實現,與上述前序遍歷類似,只有稍許不同,注意

*/public list

inorderbt1

(binarytree root)

//到達最左邊,列印並改變方向if(

!stack.

isempty()

)}return inorderresult;

}

後序遍歷

遞迴

public

void

postorderbt

(binarytree root)

非遞迴
/**

* 後序遍歷的非遞迴實現

* 技巧:妙用前序遍歷的非遞迴可以實現後序遍歷的非遞迴實現,這裡需要注意幾點改變:後序時,先遍歷右,再遍歷左,最後將得到的結果反向就好了

*/public list

postorderbt1

(binarytree root)if(

!stack.

isempty()

)}collections.

reverse

(postorderresult)

;return postorderresult;

}

二叉樹的最大深度
public

intmaxdepth

(treenode root)

平衡二叉樹

思路:遞迴

private

boolean result =

true

;public

boolean

isbalanced

(treenode root)

public

intmaxdepth

(treenode root)

對稱二叉樹

思路:遞迴

public

boolean

issymmetric

(treenode root)

public

boolean

ismirror

(treenode t1, treenode t2)

if(t1 == null || t2 == null)

return

(t1.val == t2.val)

&&ismirror

(t1.right, t2.left)

&&ismirror

(t1.left, t2.right)

;}

翻轉二叉樹
public treenode inverttree

(treenode root)

treenode right =

inverttree

(root.right)

; treenode left =

inverttree

(root.left)

; root.left = right;

root.right = left;

return root;

}

資料結構演算法 二叉樹

二叉樹資料結構 bintree.h include templateclass bintree template class treenode type data treenode lchild 左,右子樹 treenode rchild template class bintree void cr...

資料結構 樹和二叉樹

第一節 二叉樹的定義與基本操作 定義 我們把滿足以下兩個條件的樹型結構叫做二叉樹 binary tree 1 每個結點的度都不大於2 2 每個結點的孩子結點次序不能任意顛倒。由定義得出 二叉樹的每個結點只能含有0 1或2個孩子,且有左右之分。1 二叉樹的五種基本形態 2 二叉樹性質 性質1 二叉樹第...

資料結構 樹和二叉樹

定義 二叉樹是n n 0 個節點的有限集合,該集合或者為空集 稱為空二叉樹 或者由乙個根節點和兩棵互不相交的 分別稱為根節點的左子樹和右子樹的二叉樹組成。特點 每個節點最多有兩棵子樹 二叉樹是有序的,其次序不能任意顛倒 斜樹 1.所有節點都只有左子樹的二叉樹稱為左斜樹 2.所有節點都只有右子樹的二叉...