二叉搜尋樹的插入,刪除,和中序遍歷

2022-09-10 18:24:20 字數 1508 閱讀 2422

構建乙個值的型別為int的二叉搜尋樹,輸入n和m,然後進行n次插入操作,每次插入之後進行一次遍歷驗證**正確性。然後進行m次刪除操作,每次刪除之後進行一次遍歷驗證**正確性。

#include "

bits/stdc++.h

"using

namespace

std;

typedef

long

long

ll;const

int inf = 0x3f3f3f3f

;struct

bst *root;

void remove(int

value);

bst* init(int

val)

void insert(int

val)

father =now;

if (now->value else

}if (father ==null)

else

if (father->value else}/*

這題的難點在於刪除乙個節點,思路是:

當要刪除的節點右子樹不為空時,用右子樹中的最小值代替要刪除的節點的值,同時刪除右子樹中值最小的節點

否則右子樹為空,可以用左子樹代替當前位置

當要刪除的節點是唯一節點時,將root置為空

*/int findandremovemin(bst*point)

int ans = point->value;

remove(ans);

return

ans;

}void remove(int

value)

else

else

if (now->value > father->value)

else

free

(now);

}return

; }

father =now;

if (now->value else

}}//

二叉搜尋樹中序遍歷後會得到乙個公升序數列,這裡用遞迴寫起來很方便;

void ergodic(bst*point)

ergodic(point->lson);

printf(

"%d

", point->value);

ergodic(point->rson);

}int

main()

while (m--)

return0;

}

二叉樹的中序遍歷還有一種非遞迴寫法,以此**代替上面的ergodic效果也是一樣的

void ergodic(bst*point) 

point =sta.top();

sta.pop();

printf(

"%d

", point->value);

point = point->rson;

} }

平衡二叉搜尋樹的插入和先序遍歷

構建乙個值的型別為int的平衡二叉搜尋樹,輸入n,然後進行n次插入操作,每次插入之後進行一次遍歷驗證 正確性。刪除目前還寫不出來,以後有機會再補吧 include bits stdc h using namespace std typedef long long ll const int inf 0...

二叉搜尋樹的插入 刪除與遍歷

二叉搜尋樹是有序的,插入之後要使插入後的樹還是有序的,就必須比較每個節點的值,然後再選擇合適的位置插入,首先先將樹的節點設計如下 typedef int elemtype typedef struct bstnode bstnode 插入的方式實現了兩種,一種是遞迴方式,一種是非遞迴實現。非遞迴 購...

二叉搜尋樹的插入和刪除

include include using namespace std typedef struct nodenode,pnode void binary tree insert pnode pn,pnode pz 二叉樹插入操作 else pz parent y if y null else if...