#include#include#include#includeusing namespace std;
struct stud;
stud * empty(stud * cur)//刪除樹
inline int height(stud * cur)//計算高度
stud* llchange(stud * cur) //ll旋轉操作
stud* rrchange(stud* cur)//rr旋轉操作
stud* lrchange(stud* cur) //lr旋轉操左
stud* rlchange(stud * cur)
stud* insert(stud * cur,int va)
if(cur->val==va) return cur;//有相同的
if(cur->val>va)
}else//同理
}cur->height=max(height(cur->left),height(cur->right))+1;
return cur;
}stud * adjust(stud *cur)//對於刪除了乙個節點,那麼是需要判斷是否還是平衡,如果不平衡,就要調整
if(height(cur->right)-height(cur->left)==2)
cur->height=max(height(cur->left),height(cur->right))+1;
return cur;
}stud * delete(stud * cur,int va)
else//否則,將其右子樹的最左孩子作為這個節點,並且遞迴刪除這個節點的值
return cur;
}if(cur->val>va)//調節刪除節點後可能涉及的節點
cur->left=delete(cur->left,va);
if(cur->valright=delete(cur->right,va);
cur->height=max(height(cur->left),height(cur->right))+1;
if(cur->left)
cur->left=adjust(cur->left);
if(cur->right)
cur->right=adjust(cur->right);
if(cur) cur=adjust(cur);
return cur;
}void show(stud *cur)//前序遍歷方便看樹的結果
int main()
{ int i,j;
int n,x;
stud * root=null;
while(~scanf("%d",&n))
{root=empty(root);
for(int i=0;i
python實現平衡二叉樹 平衡二叉樹python
stack depth is initialised to 0 def find in tree node,find condition,stack depth assert stack depth max stack depth deeper than max depth stack depth ...
平衡二叉樹例題 平衡二叉樹
acwing 72.平衡二叉樹 思路一 求每個節點的左右子樹深度,根據深度差判斷,直到葉子節點結束,效率不夠高,每個節點都要用兩次計算深度的遞迴函式 思路二 從葉子節點開始,計算深度差,一旦有深度差大於1的,就直接返回0,也不用管上面的深度是不是正確了,畢竟我們只需要true和false兩種狀態,省...
二叉樹 平衡二叉樹
1.題目 給定乙個二叉樹,判斷這棵二叉樹是否是高度平衡的二叉樹 平衡二叉樹 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1 2.題目分析 1 如果乙個節點的兩個子樹的深度之差超過1,則不是平衡二叉樹 2 如果乙個節點的兩個子樹的深度之差不超過1,則是平衡二叉樹 3.程式分析 1 若這棵二...