劍指offer 面試題19 二叉樹的映象

2021-08-10 12:09:42 字數 1149 閱讀 6279

題目:操作給定的二叉樹,將其變換為源二叉樹的映象。

二叉樹的映象定義:源二叉樹 

8/ \

6 10

/ \ / \

5 7 9 11

映象二叉樹

8/ \

10 6

/ \ / \

11 9 7 5

**1:遞迴方法

/*

struct treenode

};*/

class solution

分析:先序遍歷這棵樹,如果遍歷到的結點有子節點,就交換它的子結點。當交換完所有的非葉子結點的左右子結點以後,就得到了樹的映象。

**2:非遞迴方法(vector + swap())

void mirror(treenode *proot) 

vv.swap(t);

}}

分析:比較好理解,不贅述了。

**3:非遞迴方法(佇列)

void mirror(treenode *proot)  

else

} }

分析:我們按照廣度遍歷二叉樹的順序,逐個處理遍歷的節點。當處理的當前節點,如果有孩子節點,我們交換它們的孩子節點,並且把它們的非空孩子入佇列。處理完當前節點以後,我們下一次處理隊頭的節點。

**4:非遞迴方法(棧)

void mirror(treenode *proot)  

if (pointer->left != null)//非空左子樹入棧

s.push(pointer->left);

if (pointer->right != null)//非空右子樹入棧

s.push(pointer->right);

} }

分析:我們也可以按照先序遍歷二叉樹的順序,非遞迴的實現二叉樹的映象操作,每遇到乙個節點,判斷當前節點是否有孩子,如果有孩子,我們交換其左右孩子,然後把非空孩子入棧。直到隊列為空。

劍指Offer 面試題19 映象二叉樹

操作給定的二叉樹,將其變換為源二叉樹的映象。以題目中的兩棵樹為例 就是先序遍歷這棵樹,如果當前正在遍歷的節點有子結點 無論是左還是右 就交換兩個子節點,當交換完所有的非葉子結點的左右子結點的時候,就得到了樹的映象.具體過程如下所示 注意6和10交換之後,第三層結點的排列順序 遞迴實現 public ...

劍指Offer 面試題19 二叉樹的映象

二叉樹的映象 請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 1000,n代表將要輸入的二叉樹節點的個數 節點從1開始編號 接下來一行有n個數字,代表第i個二叉樹節點的元素的值。接下來有n行,每...

劍指offer面試題19 二叉樹的映象

解題思路 1 遞迴實現 利用中序遍歷的思想,在遍歷到每乙個節點的同時,如果這個節點不為空或者這個節點不為葉子節點,將其看做根節點,交換其左右子樹的指標的位置。直到遞迴返回到根節點為止,形成二叉樹的映象。class treenode 求二叉樹的映象 public class solution 葉子節點...