二叉搜尋樹

2021-07-13 15:12:19 字數 2017 閱讀 1084

二叉搜尋樹

二叉搜尋樹是基於二叉樹的一種結構,對於乙個二叉樹它的左節點小於它的根節點,它的右節點大於它的根節點,它的每個子樹的結構相同

其結構以及介面實現過程如下

templatestruct bstreenode

};templateclass bstree

~bstree()

public:

bool insert(const k&key, const v&value)//插入節點

node*parent = null;

node*cur = _root;

while (cur)

else if (cur->_value>value)

else

return false;

}if (value > parent->_value)

parent->_right = new node(key, value);

else

parent->_left = new node(key, value);

return true; }

bool insert_r(const k&key, const v&value)//遞迴控制

node*find_r(const v&value)//遞迴

node*find(const v&value)//尋找結點

return null;//未找到

} bool remove(const v&value)//刪除結點,刪除成功返回true,若不存在value則返回false

else if (cur->_value < value)

else

break;

} if (cur == null)

return false;

node*del;

//情況1

if (cur->_left == null)

else

} else if (cur->_right == null)

else

}else//情況2

del = firstleft;

cur->_key = firstleft->_key;

cur->_value = firstleft->_value;

if (parent->_left == firstleft)

else

parent->_right = firstleft->_right;

} delete del;

return true;

} bool remove_r(const v&value)

void inorder()//中序遍歷,即二叉樹敗絮

private:

void _destroy(node*root)

void _inorder(node*root)

bool _insert_r(node*&root,const k&key,const v&value)

if (value > root->_value)

return _insert_r(root->_right, key, value);//遞迴右樹

else if (value_value)

return _insert_r(root->_left,key,value);//遞迴左樹

return false;

} node*_find_r(node*root, const v&value)

bool _remove_r(node*&root, const v&value)

swap(cur->_value, root->_value);

swap(cur->_key, root->_key);

del = cur;

parent->_left = cur->_right;

}delete del;

} return true;

}private:

node*_root;

};

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 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 解釋 輸入為 ...