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