1. 程式人生 > >劍指Offer 二叉樹的鏡像

劍指Offer 二叉樹的鏡像

left 思路 只有一個 lan turn 二叉 www. pid 隊列

  題目描述:操作給定的二叉樹,將其變換為源二叉樹的鏡像。

  題目鏈接:二叉樹的鏡像

  思路:通過BFS來遍歷每個結點,交換當前結點的左右孩子結點即交換左右子樹。

  步驟:

  1 如果根結點為空或者只有一個結點,則結束。

  2 創建實現了Queue接口的LinkedList對象。

  3 根結點入隊列。

  4 通過BFS來遍歷每個結點,交換當前結點的左右孩子結點。

  Java代碼:

 1 import java.util.Queue;
 2 import java.util.LinkedList;
 3 /**
 4 public class TreeNode {
 5     int val = 0;
6 TreeNode left = null; 7 TreeNode right = null; 8 9 public TreeNode(int val) { 10 this.val = val; 11 12 } 13 14 } 15 */ 16 public class Solution { 17 public void Mirror(TreeNode root) { 18 if (root == null || (root.left == null && root.right == null)) {
19 return; 20 } 21 22 // 遞歸實現,交換左右子樹 23 /**TreeNode temp = root.left; 24 root.left = root.right; 25 root.right = temp; 26 27 Mirror(root.left); 28 Mirror(root.right);**/ 29 30 Queue<TreeNode> queue = new
LinkedList<TreeNode>(); 31 queue.add(root); 32 33 while (true) { 34 if (queue.isEmpty()) { 35 break; 36 } 37 38 while (!queue.isEmpty()) { 39 TreeNode cur = queue.remove(); 40 41 TreeNode left = cur.left; 42 TreeNode right = cur.right; 43 44 // 避免都是null 45 if (left != right) { 46 if (left != null) { 47 queue.add(left); 48 } 49 if (right != null) { 50 queue.add(right); 51 } 52 53 TreeNode temp = left; 54 cur.left = right; 55 cur.right = temp; 56 } 57 } 58 } 59 } 60 }

劍指Offer 二叉樹的鏡像