交換左右子樹(shù)用什么遍歷 二叉樹(shù)中如何交換左右子樹(shù)?
二叉樹(shù)中如何交換左右子樹(shù)?使用遍歷,每次遍歷節(jié)點(diǎn)時(shí),它都會(huì)交換其左右子樹(shù)voidswap(bnode*root){//遍歷bnode*tempif(root)!=null){swap(root->
二叉樹(shù)中如何交換左右子樹(shù)?
使用遍歷,每次遍歷節(jié)點(diǎn)時(shí),它都會(huì)交換其左右子樹(shù)voidswap(bnode*root){//遍歷bnode*tempif(root)!=null){swap(root->lchild):swap(root->rchild)temp=root->lchild=root->rchildroot->rchildroot->rchildroot->rchild=temp}
根據(jù)二叉樹(shù)的特性,如堆或搜索二叉樹(shù),不允許交換左右子樹(shù)
這取決于二叉樹(shù)的特性
像堆或搜索二叉樹(shù)一樣,不允許交換左右子樹(shù)
使用遍歷,每次遍歷到一個(gè)節(jié)點(diǎn),交換它的左右子樹(shù)
void swap(bnode*root)
{//使用后序遍歷
bnode*temp
if(root)!=null)
{
swap(root->lchild)
swap(root->rchild)
temp=root->lchild
root->lchild=root->rchild
root->rchild=temp
}
如果需要轉(zhuǎn)換所有節(jié)點(diǎn)的所有左、右子樹(shù),則主要有兩種方法。深度優(yōu)先遍歷,從根到最小子樹(shù)的訪(fǎng)問(wèn)解決問(wèn)題。當(dāng)所有節(jié)點(diǎn)都被訪(fǎng)問(wèn)時(shí),交換就完成了。或者BFS廣度優(yōu)先從根節(jié)點(diǎn)依次交換左右子樹(shù),訪(fǎng)問(wèn)完所有節(jié)點(diǎn)后交換完成。建議使用BFS。邏輯簡(jiǎn)單易懂,實(shí)現(xiàn)簡(jiǎn)單。排隊(duì)感覺(jué)也比堆積如山好。
二叉樹(shù)的左右子樹(shù)可以任意交換嗎?
傳入樹(shù)的根節(jié)點(diǎn):exchangelr(&root)//根是樹(shù)的根節(jié)點(diǎn)。Void exchangelr(treenode*root){treenode*TMP if(root==null)return//左子樹(shù)交換exchangelr(root->left)//右子樹(shù)交換exchangelr(root->right)//當(dāng)前節(jié)點(diǎn)的左右子樹(shù)TMP=root->left root->left=root->right root->right=TMP}