《演算法筆記》9 4 二叉查詢樹

2021-10-05 14:58:11 字數 2574 閱讀 6819

一.定義

1.二叉查詢樹可以是一棵空樹;

2.左子樹所有結點的資料域均小於等於根結點,右子樹所有結點的資料域均大於等於根結點;

二.基本操作

1.查詢操作

void

search

(node* root,

int x)

if(x == root-

>data)

printf

("%d\n"

, root-

>id)

;else

if(x < root-

>data)

search

(root-

>lchild, x)

;else

search

(root-

>rchild, x)

;}

2.插入操作

void

insert

(node*

&root,

int x)

if(x == root-

>data)

return

;else

if(x < root-

>data)

insert

(root-

>lchild, x)

;else

insert

(root-

>rchild, x)

;}

3.二叉查詢樹的建立

node*

create

(int deta,

int n)

4.刪除

為了保證刪除後還是一顆二叉查詢樹,選擇被刪除元素的前驅或後繼結點,覆蓋被刪除元素,然後刪除原結點;

//找前驅結點:

node*

findmax

(node* root)

//找後繼結點:

node*

findmin

(node* root)

//刪除函式:

void

deletenode

(node*

&root,

int x)

else

}else

if(root-

>data > x)

deletenode

(root-

>lchild, x)

;else

deletenode

(root-

>rchild, x)

;}

三.二叉查詢樹的性質

對二叉查詢樹中序遍歷,結果是有序的;

四.題目

1.pat a1064

思路:如何用n個整數構建一顆完全二叉查詢樹:用乙個陣列(1~n)存放一顆完全二叉樹,相當於該二叉樹的層序遍歷;把該二叉樹中序遍歷,並且在中序遍歷的同時放入輸入的資料;

注意:input[i] 中 i 不能是1~n,只能從 0 開始,why?

**:

#include

#include

using

namespace std;

const

int maxn =

1010

;int n;

int j =0;

int input[maxn]

;int cbt[maxn]

;void

inorder

(int n)

intmain()

return0;

}

2.pat a1099

注意:對於中序遍歷,無論是二叉樹還是完全二叉樹,結束條件都是結點不存在(i == -1 / i >= n);

**:

#include

#include

#include

#include

using

namespace std;

const

int maxn =

110;

int n;

int index =0;

int input[maxn]

;vector<

int> ans;

struct node node[maxn]

;void

inorder

(int i)

void

bfs()}

intmain()

for(

int i =

0; i < n; i++

)scanf

("%d"

,&input[i]);

sort

(input, input + n)

;inorder(0

);bfs();

for(

int i =

0; i < n; i++

)return0;

}

3.pat a1043

搞不懂它怎麼 insert 的……

演算法筆記9 4 二叉查詢樹 BST

search函式查詢二叉查詢樹中資料域為x的結點 插入乙個資料域為x的新結點 注意引數root要加引用 void insert node root,int x if x root data return 結點已經存在 不需要插入 二叉查詢樹元素一定不會重複 else if xdata insert ...

9 4 二叉查詢樹

唯一的坑在於 輸入中可能有重複元素,但是輸出的二叉樹遍歷序列中重複元素不用輸出。題目中沒說。中序遍歷 前序遍歷 後序遍歷才能唯一的確定一棵二叉樹 對 二叉排序樹 而言,相同元素的二叉排序樹中序遍歷一定相同,而不同元素二叉排序樹使用前序遍歷就可以發現不相同,所以只需要前序遍歷兩個二叉樹,比較一下就可以...

演算法 二叉查詢樹

二叉查詢樹 binary search tree 也稱有序二叉樹 ordered binary tree 排序二叉樹 sorted binary tree 是指一棵空樹或者具有下列性質的二叉樹 1.若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2.若任意節點的右子樹不空,則右子...