實現非遞迴版本的搜尋二叉樹的插入、查詢和刪除
插入:這裡的思想是定義兩個指標乙個指向當前結點,乙個指向當前結點的父節點,當前結點就是找要插入的位置,插入整體分為兩步,第一步是找到要插入的位置,第二步判斷要插入的值與此時父節點的大小,來決定是插入到左子樹還是右子樹即可;
**實現:
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 ...