二叉樹的基礎操作

2022-07-20 20:03:11 字數 2317 閱讀 2643

struct

bitree;//

初始化bitree* create()

//若想中序或後序建立,則只需改變函式中

//t->data=a;t->lchild=create();t->rchild=create();這三條語句的順序

//先給t->data=a在先的話是先序,在中間的話是中序,在最後的話是後序。

}

/*

先序的遍歷順序是根節點->左子樹->右子樹。

中序的遍歷順序是左子樹->根節點->右子樹。

後序的遍歷順序是右子樹->根節點->左子樹。

層序的遍歷順序是按層順次遍歷。

先序、中序、後序的**基本相同

*/void pre(bitree *root)

}void mid(bitree*root)

}void post(bitree*root)

}

//

插入操作,沒有重複的元素

//插入法1:

bitree* bstinsert(bitree* l, int

key)

else

returnl;}

//插入法2:整列樹的插入

//int data[9]=;

bitree* insert(bitree* l, int data, int

n)

return

l;}

//

查詢元素位置:

/*查詢法1:

尋找最小、最大元素的方法是相同的。根據二叉樹的特點,

若左右子樹不為空,則根節點的值一定大於左子樹的值、

小於右子樹的值,那麼這棵樹的根節點的最左子樹和最右子樹即為最小、最大元素

*/bitree* searchmin(bitree* l)

if (l->lchild ==null)

else

return searchmin(l->lchild);//

使用遞迴,不斷搜尋左子樹。同理也可以搜尋右子樹來尋找最大值}/*

查詢法2:

而查詢特定元素也利用了排序樹的特點。將結點的值與待查值做比較,

若結點值大,則說明待查值在結點的左子樹;若結點值小,

則說明待查值在結點的右子樹,然後遞迴或不遞迴地查詢結點的左子樹或右子樹即可。

*/bitree* search_1(bitree* l, int

key)

//查詢法3:在此基礎上,我們可以省掉遞迴過程,用while迴圈來實現結點的遍歷。非遞迴查詢**如下:

bitree* search_2(bitree* l, int key)

return null;//

找不到就返回空

}

/*

刪除節點:

一、要求

1.沒子節點時,直接刪除

2.有子節點時,刪除該節點。

如果該節點有左節點,則左節點為父節點,右節點不變,如果沒只有左節點或者右節點,則直接提公升為父節點。

3.若左右子節點都有的話,那麼就找右子樹的最左子樹p或者尋找左子樹的最右子樹,然後把p放到刪除的那個節點的位置

*/void deletree(bitree* t, int

data)

else

if (data < p->data)

}/*找到後,p為目標結點,f為其父結點

*///

正式開始刪除節點操作

if (!p) //

找不到 printf("

錯誤,無此資料");

//以下為找到的情況

else

if (p->lchild == null) //

情況1:p無左子樹

else

if (p->rchild == null) //

情況2:p無右子樹

else

if ((p)->lchild == null && (p)->rchild == null)//

情況3:p無左子樹和右子樹

else

if ((p)->lchild != null && (p)->rchild != null)//

情況4:p有左子樹和右子樹

else

if ((f)->lchild = (p)) //

注意:這種雖然不是同一種節點,但是本質上想要刪除都是需要通過右邊的中級後節點來代替實現刪除

}}

二叉樹 基礎操作

核心思想 遞迴處理 前序 根左右 中序 左根右 後序 左右根 class node public class testtree system.out.print root.val preorder root.left preorder root.right 中序 public static void...

二叉樹的基礎操作

1 前序遍歷 public static void preorder node root system.out.println root.val preorder root.left preorder root.right 2 中序遍歷 public static void inorder node...

二叉樹 二叉樹的相關操作

遞迴實現 建立求樹高 求葉子數 求節點數 統計度為2的結點個數 後序輸出 先序輸出 中序輸出 交換左右子樹 include include include define true 1 define false 0 define ok 1 define error 0 define overflow ...