二叉查詢樹的實現C

2021-10-07 12:24:00 字數 3173 閱讀 6887

struct node};

class

bstelse

}else

//插入到root的左子樹

else

}return root_node;

}else

} node *

insert2tree

(node * root_node,

int val)

//刪除節點base,並返回根節點

node *

deletenode

(node *

const root, node *

const base, node *

& del)

if(base-

>left ==

nullptr

&& base-

>right ==

nullptr)if

(base-

>father-

>left == base)

else

}else

if(base-

>left ==

nullptr

&& base-

>right !=

nullptr)if

(base-

>father-

>left == base)

else

}else

if(base-

>left !=

nullptr

&& base-

>right ==

nullptr)if

(base-

>father-

>left == base)

else

}else

if(base-

>left !=

nullptr

&& base-

>right !=

nullptr)}

node *

deletenode

(node * base)

//中序遍歷

void

midforeach

(node * root)

midforeach

(root-

>left)

; cout << root-

>val <<

",";

midforeach

(root-

>right);}

//前序遍歷

void

preforeach

(node * root)

cout << root-

>val <<

",";

preforeach

(root-

>left)

;preforeach

(root-

>right);}

//後序遍歷

void

postforeach

(node * root)

postforeach

(root-

>left)

;postforeach

(root-

>right)

; cout << root-

>val <<

",";

}//層次遍歷

void

levelforeach

(node * root)

std::queue> que;

que.

push

(root)

;while

(!que.

empty()

)if(the_node-

>right)

} cout << endl;

}//找最小值節點

node *

minimum

(node * root)

if(root-

>left ==

nullptr

)return

minimum

(root-

>left);}

//找最大值節點

node *

maximum

(node * root)

if(root-

>right ==

nullptr

)return

maximum

(root-

>right);}

//找指定值的節點

node *

search

(node * root,

int val)

if(root-

>val > val)

if(root-

>val < val)

return root;

}//查詢前驅節點

node *

findpredecessor

(node * base)

if(base-

>left !=

nullptr

)else

if(base-

>father ==

nullptr

) base = base-

>father;}}

}//查詢後繼節點

node *

findsuccessor

(node * base)

if(base-

>right !=

nullptr

)else

if(base-

>father ==

nullptr

) base = base-

>father;}}

}//通過任意節點查詢樹的根

node *

findroot

(node * tree_node)

else

}//釋放節點記憶體

void

freenode

(node * base)

}void

movenodedata

(node * src_node, node * dst_node)

};

C 實現二叉查詢樹

樹是一種非線性結構。樹的本質是將一些節點由邊連線起來,形成層級的結構。而二叉樹是一種特殊的樹,使得樹每個子節點必須小於等於2.而二叉查詢樹又是一類特殊的二叉樹。使得每乙個節點的左節點或左子樹的所有節點必須小於這個節點,右節點必須大於這個節點。從而方便高效搜尋。下面來看如何使用c 實現二叉查詢樹。二叉...

二叉查詢樹,實現

public class binarytree 移除乙個節點 分三種情況,乙個是 該節點本身是葉子,乙個是 該節點含有乙個兒子節點 乙個是 該節點還有兩個兒子節點 param e param comareelement private binarynoderemove element e,binar...

二叉查詢樹的實現

因為在關聯容器裡面主要的內部結構是rb tree,而紅黑樹又是一種平衡二叉樹,平衡二叉樹又是屬於二叉查詢樹,所以按照 侯捷介紹的順序依次來實現,今天先把二叉查詢樹這種最簡單的實現掉 首先,二叉查詢樹 不像heap中完全二叉樹那樣記憶體分配用線性儲存的,二叉查詢樹一般內部儲存是通過鍊錶來實現的,首先來...