二叉樹的映象

2021-10-05 03:43:12 字數 1187 閱讀 8944

二叉樹的映象

我們先來觀察下面的圖:

我們可以發現這兩顆互為映象的二叉樹根節點相同,但它們左右兩個子節點交換了位置。然後以這兩個子節點為根節點再交換它們的子節點。

(a)交換根節點的左右子樹

(b)交換以10為根節點的左右子節點

(c) 交換以6為根節點的左右子節點

也就是說二叉樹的映象就是在遍歷樹的同時交換非葉子節點的子節點。

總結上面的過程,我們得出求一棵樹的映象的過程:我們先前序遍歷 這棵樹的每個結點,如果遍歷到的結點有子結點,就交換它的兩個子結點。當交換完所有非葉子結點的左右子結點之後,就得到了樹的映象。

根據上面的思路我們可以寫**了:

遞迴:

public

void

mirror

(treenode root)

//交換根節點的左右子樹

treenode temp=root.left;

root.left=root.right;

root.right=temp;

//處理左子樹

mirror

(root.left)

;mirror

(root.right)

;}

非遞迴:

public

void

mirror1

(treenode root)

stack

stack=

newstack

<

>()

; stack.

push

(root)

;while

(!stack.

isempty()

)if(node.right!=null)

}}

映象二叉樹

映象二叉樹與二叉樹的區別是左右孩子對於根節點的相對大小剛好相反不用建立映象樹,通過對原樹的映象便歷,即可得到所需的東西。後序 樹 lr根,映象 rl根。如果創立映象二叉樹,insert 改一下即可,這樣可以把preordermirror 等去掉。對於遍歷後的排序放到vector陣列裡便於比較,而且進...

映象二叉樹

題目描述 操作給定的二叉樹,將其變換為源二叉樹的映象。思路 1 獲取源二叉樹的映象,將源二叉樹的左右子樹交換即可 2 主要步驟 若二叉樹為空,直接返回 若二叉樹不為空,交換其左右子樹 遞迴的將二叉樹的其他結點進行交換 public class treenode public class soluti...

二叉樹12 二叉樹的映象

題目 操作給定的二叉樹,將其變換為源二叉樹的映象。輸入描述 思路 首先要理解業務邏輯,何為映象?所謂映象就是對於任何乙個結點,將其左右子樹進行交換即可。對於一棵以root為根結點的二叉樹,要將其映象,首先將其左右子樹 root.left為根的子樹 和 root.right為根的子樹 進行映象,然後將...