《剑指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);
}
}
}