牛客oj:二叉樹的映象牛客oj九度oj:
github**: 019-二叉樹的映象
csdn題解:劍指offer–019-二叉樹的映象
九度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....