前言
牛客網劍指offer的66道題,刷起來!每道題會提供簡單的思路以及測試通過的程式碼
題目描述
二叉樹結構:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
注:點選左下角的閱讀原文即可跳轉到原文,可以提交程式碼
解答思路
在上題中我說了對於與二叉樹有關的題目,90% 是採取遞迴的方式來解決比較簡單的。而且解法還都非常相似,沒看過上道題的或許可以看一下:
如果你遞迴學了還不錯的話,這道題用遞迴會很簡單,我們假設函式 Mirror() 就是求源二叉樹的映象。
剛開始的源二叉樹:
那麼我們可以先對根節點的左右子樹進行映象化:
left = Mirror(root.left);
right = Mirror(root.right);
映象化之後的結果:
之後我們只需要將 root 的左右節點進行交換即可
程式碼如下:
public class 二叉樹的映象 {
public void Mirror(TreeNode root) {
if(root == null)
return;
root = solve(root);
}
private TreeNode solve(TreeNode root) {
if(root == null)
return root;
// 遞迴先把左右節點映象化
TreeNode left = solve(root.left);
TreeNode right = solve(root.right);
// 對左右子樹進行交換。
root.left = right;
root.right = left;
return root;
}
}