三、拓展
二叉查詢樹(binary search tree),又被稱為二叉搜尋樹。在二叉樹中有乙個節點x
xx,假設它有左子樹l
ll和右子樹r
rr,則一定有:
v al
ue[l
]lue[
x]且v
alue
[r]>va
lue[
r]value[l]value[r]
value[
l]lue[
x]且v
alue
[r]>va
lue[
r]。官方解釋為:
};2.2.1查詢
非遞迴版本
/*非遞迴版本,十分簡單
*/bsnode
*help
(bsnode
* x, t key)
const
return x;
}bsnode
* bsnode
::search
(t key)
//
遞迴版本
/*遞迴版本,十分簡單
*/bsnode
*help
(bsnode
* x, t key)
const
bsnode
* bsnode
::search
(t key)
//
2.2.2插入和刪除
插入任意乙個與二叉樹中元素不等的節點:
void
help
(bsnode
*&treeroot,bsnode
* x)
x->parent=temp;
//判斷新增到左子樹還是右子樹
if(x-
>key < temp-
>key)
temp-
>left = x;
else
temp-
>right = x;
}void
insert
(bsnode
* x)
刪除節點:
//只有右子樹
else
}else
if(x-
>left ==
null
&& x-
>right ==
null
)//第二種情況:被刪除節點是葉節點(最簡單)
else
//第三種情況:被刪除節點有兩個子節點
x->key = cur***ther-
>left-
>key;
//將右子樹中最小值賦值給要刪除節點
if(cur***ther-
>lef-
>right!=
null
)delete cur***ther-
>left;}}
void
remove
(t key)}}
void
remove
(t key)
}2.2.3前序、中序和後序遍歷
前序遍歷:中->左->右
/*遞迴版本十分簡單
*/void
preorder
(bsnode
*&tree)
const
}
中序遍歷:左->中->右
/*遞迴版本十分簡單
*/void
inorder
(bsnode
*&tree)
const
}
後序遍歷:左->右->中
/*遞迴版本十分簡單
*/void
postorder
(bsnode
*&tree)
const
}
請看我對力扣二叉搜尋樹題解相關分析。 二叉樹 二叉查詢樹
構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...
二叉樹 二叉查詢樹
二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...
樹(樹,二叉樹,二叉查詢樹)
1.定義 n n 0 個結點構成的有限集合。當n 0時,稱為空樹 2.對於任一棵非空樹 n 0 它具備以下性質 1 樹中有乙個稱為 根 root 的特殊結點,用 r 表示 2 其餘結點可分為m m 0 個互不相交的有限集t1,t2,其中每個集合本身又是一棵樹,稱為原來樹的子樹。3.樹的一些性質 1 ...