二叉搜尋樹又稱二叉排序樹,它或者是一棵空樹,或者是具有以下性質的二叉樹:
1.若它的左子樹不為空,則左子樹上所有節點的值都小於根節點的值
2.若它的右子樹不為空,則右子樹上所有節點的值都大於根節點的值
3.它的左右子樹也分別為二叉搜尋樹
#pragma once
templatestruct bstreenode // binary search tree node
};templateclass bstree // binary search tree
node* parent = nullptr;
node* cur = _root;
while (cur)
else if (cur->_key > key)
else
}cur = new node(key);
if (parent->_key < key)
else
return true;
} bool find(const k& key)
else if (cur->_key > key)
else
}return false;
} bool erase(const k& key)
else if (cur->_key > key)
else
else if (cur->_right == nullptr)
else
// 替代刪除嗎
cur->_key = rightmin->_key;
// 轉換成刪除rightmin
rightminparent->_left = rightmin->_right;
delete rightmin;
}return true;
}} return false;
} void _inorder(node* root)
void inorder()
private:
node* _root = nullptr;
};void testbstree()
; for (auto e : a)
t.inorder();
// 這裡有問題?去思考為什麼?怎麼解決?
// 1、葉子
t.erase(2);
t.inorder();
// 左為空,或者右為空
t.erase(8);
t.erase(1);
t.inorder();
// 左為空,或者右為空
t.erase(5);
t.inorder();
// 這裡也有問題,大家先自己下去分析一下?
for (auto e : a)
}
二叉搜尋樹的簡單實現
查詢是否有某個元素,找到返回true,找不到返回false public boolean contains int key else if key else return false 插入某元素,如果已經包含該元素則返回false,插入成功就返回true public boolean insert ...
二叉搜尋樹的簡單實現
上述條件反之亦可 接近二分查詢,最大查詢次數為樹的高度,平均查詢次數log2 n template class t struct bstnode template class t class bstree else if cur val val else if cur val val return ...
bst 二叉搜尋樹簡單實現
陣列實現二叉樹 1.下標為零的元素為根節點,沒有父節點 2.節點i的左兒子是2 i 1 右兒子2 i 2 父節點 i 1 2 3.下標i為奇數則該節點有有兄弟,否則又左兄弟 4.對bst樹的操作主要有插入,刪除,後繼前驅的查詢,樹最大最小節點檢視 include using namespace st...