二叉搜尋樹C VS2017

2021-09-04 11:51:05 字數 2703 閱讀 4612

將小的數放到左兒子上,將大的數放到右兒子上,於是建樹成功後,最左邊的是最小的,最右邊的是最大。中序遍歷將會得到從小到大的排序順序。這篇部落格會介紹二叉搜尋樹的插入和刪除,還有為了方便演示,會介紹到中序遞迴遍歷。

給定陣列

8,5,20,3,6,15,7,得到的二叉搜尋樹為:

中序遍歷的結果:3,5,6,7,8,15,20,剛好是從小到大排序的。

class bstnode

};class bstree

2、插入函式insert:將小的數值插入到左兒子上,大的數值插入到右兒子上,於是採取遞迴操作。

void bstree::insert(bstnode * &t, int key)

為了在實際中(我為了中序遍歷書寫簡單些,將*root設為了共有變數)不訪問根節點*root,所以需要再加入乙個函式:

/*插入演算法*/

void bstree::insert(int key)

3、刪除函式delete:刪除分為三種情況

第一種:沒有兒子:比如刪除7所在節點的時候,直接找到這個節點刪除

第二種:只有乙個兒子:比如刪除20的時候,直接將它的不為空的兒子取代當前結點:

新的搜尋樹:

第三種:左右兒子都不為空:比如刪除數值為5的節點,此時找到以該節點為樹根的樹的最右邊的節點,可以發現是7。將找到的節點和原節點替換(就是將5和7替換),刪掉原來的節點。

刪除5後的圖:

**如下:

/*找到需要刪除數值所在的節點*/

bstnode *&bstree::find_equal(bstnode *&t, int key)

if (key < t->val)

find_equal(t->left, key);

else if (key > t->val)

find_equal(t->right, key);

else

return t;

void bstree::bstdelete(int key)

if (y == t)  //y與t重合的情況

y->right = x->right;

else

y->left = x->left;

p = x;

x->left = t->left;

x->right = t->right;

}else

delete t;}}

// bstree.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。

//#include #includeusing namespace std;

class bstnode

};class bstree

;bstree::bstree()

void bstree::insert(bstnode * &t, int key)

/*插入演算法*/

void bstree::insert(int key)

void bstree::inorder(bstnode *t)

}/*找到需要刪除數值所在的節點*/

bstnode *&bstree::find_equal(bstnode *&t, int key)

if (key < t->val)

find_equal(t->left, key);

else if (key > t->val)

find_equal(t->right, key);

else

return t;

}void bstree::bstdelete(int key)

if (y == t) //y與t重合的情況

y->right = x->right;

else

y->left = x->left;

p = x;

x->left = t->left;

x->right = t->right;

} else

delete t; }}

int main()

if (count == 2)

cout << "\n搜尋樹中序遍歷結果:" << endl;

cout << "" << endl;

cout << "1、新增樹 2、輸入要刪除的數字 3、退出" << endl;

cin >> count;

} cout << "退出!" << endl;

return 0;

}

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

二叉搜尋樹 修剪二叉搜尋樹

第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...