二叉排序樹的查詢 插入 刪除(C 實現)

2021-09-19 05:52:02 字數 1321 閱讀 4795

部落格中**都經過執行並且沒有bug

//用二叉鍊錶結構構造二叉排序樹

class treenode//樹的結點

class bitree//二叉樹

//構建一顆二叉排序樹

private static bitree initbitree()

//二叉排序樹查詢

//t 二叉樹的根 key 查詢的結點的值 f 當前二叉樹的父結點 p 查詢到的結點(或沒查詢到的情況下指標最後指向的結點)

private static bool searchbst(treenode t, int key, treenode f, out treenode p)

else if (key == t.key)//查詢成功

else if (key < t.key)

else

}//二叉排序樹插入

//t 二叉樹的根 key 查詢的結點的值 f 當前二叉樹的父結點 p 查詢到的結點(或沒查詢到的情況下指標最後指向的結點)

private static bool insertbst(bitree bitree, treenode e)

else if (e.key < p.key)

else

return true;

}else

}//刪除節點

//isleftchild t是dp結點的左子樹 -1 t是dp結點的左子樹 1 t沒有父結點,即dp為空 0

private static bool deletebst(treenode t, int key,treenode dp,int isleftchild)

else

else if (key < t.key)

else

return true;}}

//刪除對應結點,並使表結構發生變化使其仍然為二叉排序樹

private static void delete(treenode t, treenode dp, int isleftchild)

else

}else if (t.rchild == null)

else

}else

t.key = mov.key;

t.treenodename = mov.treenodename;

if (pre.lchild!=null && pre.lchild.key == mov.key)

else}}

static void main(string args)

二叉排序樹查詢的時間複雜度:p(n)=2(n+1)/n*logn+c

二叉排序樹 插入 刪除 查詢

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

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

二叉排序樹的查詢 插入 刪除 何謂二叉排序樹 定義 二叉排序樹又稱二叉查詢樹,它或者是一顆空樹,或者是具有以下性質的二叉樹 1 若它的左子樹不空,則左子樹上所有節點的值均小於該節點的值。2 若它的右子樹不空,則右字樹上所有節點的值均大於該節點的值。3 它的左右子樹也分別為二叉排序樹。時間複雜度 o ...

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

近期逐步開始期末複習,在部落格上投入的精力將大幅減少大概一月左右!二叉樹的二叉鍊錶結點結構定義 typedef struct bitnodebitnode,bitree 遞迴查詢二叉排序樹t中是否存在key,指標f指向t的雙親,其初始呼叫值位null,若查詢成功,則指標p指向該資料元素結點,並返回t...