二叉搜尋樹的簡單實現

2021-10-08 16:09:51 字數 1391 閱讀 4861

二叉搜尋樹又稱二叉排序樹,它或者是一棵空樹,或者是具有以下性質的二叉樹:

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...