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

2022-09-10 18:24:17 字數 1628 閱讀 9297

構建乙個值的型別為int的平衡二叉搜尋樹,輸入n,然後進行n次插入操作,每次插入之後進行一次遍歷驗證**正確性。(刪除目前還寫不出來,以後有機會再補吧)

#include "

bits/stdc++.h

"using

namespace

std;

typedef

long

long

ll;const

int inf = 0x3f3f3f3f

;struct

**l *root;

**l*fafa;

**l*fa;

**l*me;

**l* init(int val, **l*fa)

void updateheight(**l*point)

}bool unbalance(**l*point)

int lheight = fafa->lson == null ? 0 : fafa->lson->height;

int rheight = fafa->rson == null ? 0 : fafa->rson->height;

if (abs(lheight - rheight) > 1

)

return

unbalance(fa);

}void leftrotate(**l* fa, **l*me)

else

}fa->rson = me->lson;

if (me->lson !=null)

fa->father =me;

me->lson =fa;

updateheight(fa);

}void rightrotate(**l* fa, **l*me)

else

}fa->lson = me->rson;

if (me->rson !=null)

fa->father =me;

me->rson =fa;

updateheight(fa);

}void

rebalance()

if (fafa->rson == fa && fa->rson ==me)

if (fafa->lson == fa && fa->rson ==me)

rightrotate(fa, me);

leftrotate(fafa, me);

}void insert(int

val)

father =now;

if (now->value else

}if (father ==null)

else

if (father->value }

else

}}void ergodic(**l*point)

printf(

"%d

", point->value);

ergodic(point->lson);

ergodic(point->rson);

}int

main()

ergodic(root);

puts(

"");

}return0;

}

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

構建乙個值的型別為int的二叉搜尋樹,輸入n和m,然後進行n次插入操作,每次插入之後進行一次遍歷驗證 正確性。然後進行m次刪除操作,每次刪除之後進行一次遍歷驗證 正確性。include bits stdc h using namespace std typedef long long ll cons...

二叉樹先序遍歷和中序遍歷確定二叉樹

由於希望得到一顆二叉樹,所以返回值型別是乙個指向根節點的指標 表示得到了一顆二叉樹 btnode creatbt char pre,char int,int l1,int r1,int l2,int r2 引數列表有傳入的先序序列和後序序列和他們的開頭和結尾 由於是遞迴函式,先寫乙個遞迴出口,顯然是...

先序構建二叉樹及先序遍歷二叉樹

先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...