《劍指offer》編程題-二叉樹的鏡像
#要求:操作給定的二叉樹,將其變換爲源二叉樹的鏡像。
#輸入描述:
二叉樹的鏡像定義:源二叉樹 8 / \ 6 10 / \ / \ 5 7 9 11 鏡像二叉樹 8 / \ 10 6 / \ / \ 11 9 7 5
#分析:即交換樹的每一個子樹的左右節點。
思路1:由於樹結構的特點,我們一般利用遞歸來實現,即對於每個結點,如果其子女結點存在的話,就交換其值,以此遞歸。
思路2:用棧可以消除遞歸。我們用棧FILO的特點來實現數左右結點 左右互換的操作。
import java.util.*;
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
public void Mirror(TreeNode root) {
if(root == null) return;
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);
while(!stack.empty()) {
TreeNode node = stack.pop();
if(node.left != null || node.right != null) {
TreeNode nodeLeft = node.left;
TreeNode nodeRight = node.right;
node.left = nodeRight;
node.right = nodeLeft;
}
if(node.left != null) stack.push(node.left);
if(node.right != null) stack.push(node.right);
}
}
}