劍指Offer 019 二叉樹的映象

2021-07-11 06:32:25 字數 2455 閱讀 6957

牛客oj:二叉樹的映象

九度oj:

github**: 019-二叉樹的映象

csdn題解:劍指offer–019-二叉樹的映象

牛客oj

九度oj

csdn題解

github**

二叉樹的映象

1521-二叉樹的映象

劍指offer–019-二叉樹的映象

019-二叉樹的映象

您也可以選擇回到目錄-劍指offer–題集目錄索引

題目描述

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

輸入描述

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

8 / \

6 10

/ \ / \

5 7 9 11

映象二叉樹

8 / \

10 6

/ \ / \

11 9 7 5

通過畫圖,可知二叉樹的映象如下圖所示:

中間像放置了一面鏡子,將源二叉樹投射在鏡子中

通常的思路,我們建立乙個樹以後,交換沒個節點的左右孩子就行了。

因此我們只需要遍歷二叉樹,然後每次訪問(輸出)乙個節點的時候。交換其左右孩子即可

於是我們實現了下面的遞迴,非遞迴的函式版本,其本質是相同的,就是把前序中序,後序遍歷中的列印節點的過程,程式設計交換左右子樹的過程,其中需要注意一點,就是交換後左右子樹進行了交換,再往下走的時候,往左走往右走的過程需改變,原來的向右走,現在應該是向左走,

採用遞迴思路,層層交換節點的左右孩子指標。

class solution

swap(proot->left, proot->right);

mirror(proot->left);

mirror(proot->right);}};

前序遍歷的過程中,先根,再左再右,

由於根後面才對左右子樹進行訪問,因此訪問順序可不交換,我們此時的訪問順序依舊是根左右,但是對應原來的根右左

class solution

stack

nstack;

treenode *node = root;

while(node != null

|| nstack.empty( ) != true)

nstack.push(node);

node = node->left;

}if(nstack.empty( ) != true)}}

void mirrorprebfs(treenode *root)

stack

nstack;

nstack.push(root);

treenode *node = root;

while(nstack.empty() != true)

if(node->left != null)

if(node->right != null)}}

};

中序遍歷的時候,訪問順序左根右,由於訪問後,依然要向右走,

所以交換後,變成了向左走

class solution

stack

nstack;

treenode *node = root;

// 開始遍歷整個二叉樹

while(node != null || nstack.empty() != true)

// 此時棧頂的元素是當前最左元素

// 它應該被輸出

if(nstack.empty( ) != true)

nstack.pop( );

// 中序遍歷輸出根後,向右轉向

// 此時由於左右子樹交換,因此原來的右子樹是其左子樹,向左轉向

node = node->left;}}

}};

跟先序訪問一樣,訪問了左右才會訪問根,訪問順序變了

class solution

stack

nstack;

treenode *cur; //當前結點

treenode *pre = null; //前一次訪問的結點

nstack.push(root);

while(nstack.empty( ) != true)

nstack.pop( );

pre = cur;

}else

if(cur->left != null)}}

}};

劍指offer 二叉樹 二叉樹搜尋樹

package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...

劍指offer 二叉樹 二叉樹的映象

操作給定的二叉樹,將其變換為源二叉樹的映象。二叉樹的映象定義 源二叉樹 8 6 10 5 7 9 11 映象二叉樹 8 10 6 11 9 7 51,交換左右子樹 2,遞迴交換左右子樹的左右子節點 package offertest title mirror description author 田...

劍指Offer 二叉樹 對稱的二叉樹

含有兩道題,都從樹的遞迴入手 請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。解題思路 映象翻 只需要遍歷二叉樹,每次訪問乙個結點時,交換其左右子樹。實現 definition for a binary tree node.class treenode def init self,x self....