二叉排序樹的構建 插入 刪除以及二叉樹的列印

2021-07-04 06:39:09 字數 2703 閱讀 2431

定義:二叉排序樹,也可以成為二叉查詢樹  它的性質如下:
* 1.若它的左子樹不為空,則左子樹上所有的節點均小於其根節點

* 2.若它的右子樹不為空,則右子樹上所有的節點的值均大於根節點

* 3.它的左右子樹也分別為二叉排序樹。       

第一步  定義乙個樹的結點類

class node

else

if(rchild!=null)

size=lsize+rsize+1;

} }//不帶引數建構函式

node()

}

2 定義乙個樹結構

//定義乙個樹結構  其中nodes[0] 設定為根節點

class tree

//定義包含了根節點的建構函式

tree(node root)

//定義結點的建構函式

tree(arraylistnodes,node root)

}

3 定義二叉樹的查詢  根據key值進行查詢,返回boolean值

//定義乙個二叉樹的查詢 返回值是boolean型別的

public static boolean get1(node root,int key,node pointer)

else if(pointer.key

//利用遞迴實現二叉樹的插入操作

public static void insert(node root,int key,string value)

else if(pointer.key

//對二叉排序樹進行刪除操作

public static boolean delete(node root,int key)

else if(root.key

步驟1 佇列a中元素出隊 且其孩子入佇列b 

步驟2 佇列b中元素出隊 且保證佇列b中元素的孩子入佇列a  

重複步驟1,2直至佇列a b 均為空

public static void printtree()

system.out.println();

}if(queueb.size()!=0)

system.out.println();

}} }

7 對以上操作進行測試

public static void main(string args) 

else

//測試插入操作

insert(mytree.root, 10, "g");

insert(mytree.root, 2, "h");

//測試刪除操作

delete(mytree.root, 3);printtree();

8 以上是插入節點時已經設定好結點的左右孩子結點,還有一種情況是,輸入乙個陣列,根據陣列的值,構建二叉排序樹 

//根據陣列元素構造二叉排序樹  陣列的length表示的是陣列初始化時的長度 如果沒有對其進行賦值的話設定為null

node nodesarr=new node[10];//陣列初始化的時候需要設定其大小或者直接進行賦值操作

//設定一些陣列,需要通過插入的形式 構造二叉樹

nodesarr[0]=new bst().new node(6, "a", null, null);

nodesarr[1]=new bst().new node(3, "b", null, null);

nodesarr[2]=new bst().new node(9, "c", null, null);

nodesarr[3]=new bst().new node(12, "d", null, null);

nodesarr[4]=new bst().new node(15, "e", null, null);

nodesarr[5]=new bst().new node(1, "f", null, null);

nodesarr[6]=new bst().new node(7, "g", null, null);

//通過陣列構造乙個二叉排序樹 返回排序樹的root

buildtreebyarray(nodesarr);

//構造二叉樹

public static void buildtreebyarray(node arr)

}

9 增加乙個微軟的面試題 給定乙個排序好得陣列,將其轉化成二叉排序樹

間數左邊的數作為左子樹,右邊的樹作為右子樹

int arr=;
tempnode root1=buildbstbysortedarr(arr,0,arr.length-1);
//根據排序陣列構造二叉排序樹 返回該二叉排序樹的根節點

public static tempnode buildbstbysortedarr(int arr,int low,int high)

return root;//最後返回生成的二叉排序樹的根節點,方便對該二叉排序樹進一步操作(增、刪、改、查,遍歷等)

} }

以上是複習二叉排序樹的一點小小的總結,多多借鑑了別人的思想,如您發現疏漏或者錯誤,請批評指正,謝謝!

簡單二叉排序樹 二叉查詢樹的構建插入刪除操作

include includeusing namespace std struct node void insert node root,int val else if val root data else node findmin node root 遞迴查詢 node finmax node r...

二叉排序樹 插入 刪除 查詢

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

二叉排序樹的插入和刪除

遞迴的尋找插入的位置。public static treenode insert int x,treenode t else if x t.val t.left insert x,t.left else if x t.val t.right insert x,t.right 如果x已經在tree中了...