構建乙個值的型別為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...