資料結構 搜尋二叉樹的基本操作(2)

2021-08-20 05:51:40 字數 2371 閱讀 6141

實現非遞迴版本的搜尋二叉樹的插入、查詢和刪除

插入:這裡的思想是定義兩個指標乙個指向當前結點,乙個指向當前結點的父節點,當前結點就是找要插入的位置,插入整體分為兩步,第一步是找到要插入的位置,第二步判斷要插入的值與此時父節點的大小,來決定是插入到左子樹還是右子樹即可;

**實現:

void seachtreeinsert(searchnode** proot ,searchnodetype to_insert)

if(*proot ==

null)

searchnode* cur =

*proot;

searchnode* pre =

null;

while(1)

if(to_insert < cur->

data)else

if(to_insert > cur->

data)else

}searchnode* new_node = createsearchnode(to_insert);

if(new_node->

data

< pre->

data)else

return;

}

查詢:直接迴圈去找,當要查詢的值比根結點的值小時,往左子樹找,大時往右子樹找,相等時跳出迴圈找到了,跳出迴圈即可;

**如下:

searchnode* searchtreefind(searchnode* root,searchnodetype to_find)

searchnode* cur = root;

while(1)

if(to_find < cur->

data)else

if(to_find > cur->

data)else

}return cur;

}

刪除:這裡的刪除與遞迴版本的一樣,先找到要刪除的結點,然後分情況討論:如果要刪除的結點有孩子,就需要將孩子交付給父節點保管,不然刪除結點之後他的孩子會被丟失;

**實現:

void searchtreeremove(searchnode** proot,searchnodetype to_remove)

if(*proot ==

null)

searchnode* to_remove_node =

*proot;

searchnode*

parent

=null;

while(1)

if(to_remove < to_remove_node->

data)else

if(to_remove > to_remove_node->

data)else

}//2.如果找到了要刪除的節點,分情況討論

if(to_remove_node->lchild ==

null

&& to_remove_node->rchild ==

null)elseelse

}//統一釋放節點

destroysearchnode(to_remove_node);

return;

}else

if(to_remove_node->lchild !=

null

&& to_remove_node->rchild ==

null)elseelse

}destroysearchnode(to_remove_node);

return;

}else

if(to_remove_node->lchild ==

null

&& to_remove_node->rchild !=

null)elseelse

if(to_remove_node->

data

>

parent

->

data)

}destroysearchnode(to_remove_node);

return;

}else

//迴圈結束之後,min就指向了to_remove_node右子樹的最小值

to_remove_node->

data

=min

->

data;

if(min

->

data

< min_parent->

data)else

}}

Python 資料結構2 二叉樹 搜尋

二叉樹搜尋實現 from random import randint class node def init self,val initialize the node self.value val self.leftchild none self.rightchild none definsert ...

資料結構 搜尋二叉樹

它要麼是一顆空樹,要麼是具有以下性質的一顆樹 1 每個節點都有乙個作為搜尋依據的關鍵碼 key 並且每個關鍵碼都不相同 2 左子樹上的所有節點的關鍵碼都小於根節點的關鍵碼 3 右子樹上的所有節點的關鍵碼都大於根節點的關鍵碼 4 左右子樹都是搜尋二叉樹 由於它亦是乙個二叉樹,所以一些拷貝構造,析構等的...

資料結構 搜尋二叉樹

手寫實現搜尋二叉樹 class treenode treenode left son null treenode right son null treenode p null 一定儲存雙親的指標 intvalue 0 bool treeinsert treenode proot,int value ...