二叉排序樹的建立查詢與插入 C

2021-10-10 01:37:53 字數 2411 閱讀 6962

一、建立(插入):遞迴

struct

node

node

(int x)

:val

(x),

left

(null),

right

(null)}

;node*

insert

(int x,node* pnode)

else

else

return pnode;}}

void

inorder

(node*

& root)

inorder

(root->left)

; cout << root->val <<

' ';

//訪問根節點

inorder

(root->right);}

intmain()

; node* pnode =

newnode

(a[0])

;//以第乙個元素為根節點

// 每次插入都從根節點開始判斷

for(

int i =

1; i < n;

++i)

inorder

(pnode);}

//在遞迴插入時,要實現每插入乙個節點就輸出該節點的雙親節點,可在insert()函式中新增乙個引數,用於記錄輸出雙親節點的值,

//在遞迴結束時(即找到插入位置進行插入時)輸出。 另外,若要實現從空樹開始插入,即不需單獨先建立乙個根節點,insert()函式

//的node*引數可設為引用,初始時傳入乙個為null的根節點指標。

node*

insert

(int x, node*

& pnode,

int parent)

else

else

}return pnode;

}int

main()

//node* pnode = new node(a[0]);

node* pnode =

null

;for

(int i =

0; i < n;

++i)

inorder

(pnode)

;//pnode為根節點

}

非遞迴

struct

node

node

(int x)

:val

(x),

left

(null),

right

(null)}

;int

main()

node* pnode =

newnode

(a[0])

;//cout << -1 << endl;

for(

int i =

1; i < n;

++i)

else

}else

else}}

}}

二、查詢

//遞迴  僅實現查詢

node*

search

(int x,node* root)

if(root->val > x)

else

}

//非遞迴

node*

search

(int x,node* root)

if(x < root->val && root->left!=

null

)else

if(x > root->val && root->right !=

null)}

return

null

;}

三、在查詢不成功時插入

//查詢成功則返回查詢節點,不成功則返回查詢路徑上的最後乙個節點f,以便進行插入.f初始呼叫值為null

node*

search

(node* root,

int x,node* f,

bool

& found)

else

if(x == root->val)

else

if(root->val > x)

else

}void

insert

(node* f, node* root,

int x)

else

if(x < f->val)

else

}

二叉查詢樹(二叉排序樹)建立,插入,刪除操作。

尋找節點就是直接依據數值的大小。從root節點開始遍歷,大於當前遍歷節點就向它的右子樹查詢,相反則查詢它的左子樹。然後返回。直接依據root節點,遍歷到最右就是最大節點,遍歷到最左,就是最小節點。插入節點我這裡插入的節點都會成為葉子節點。依據大小的關係向下遍歷,遍歷到最後的節點,然後插入就能夠了。這...

二叉排序樹的查詢 插入與刪除

二 二叉排序樹結點的刪除 二叉排序樹的結點刪除要比二叉排序樹結點的插入要複雜一些,不過也並不難,要分為幾種情況進行討論。二叉排序樹結點的插入與刪除都是在查詢的基礎上來做的。下方我們就假設找到了我們要刪除的結點,根據結點含有的左右結點的個數來進行分類討論。下方會對這幾種情況進行討論。1.刪除結點的幾種...

二叉排序樹 插入 刪除 查詢

原本是想寫關於android分享功能的部落格,但是沒真機不好去測試,大白天的手機被3歲娃娃,拿去看少兒頻道了,關於二叉排序樹的定義是 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的...