题目大意
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述
分析
遍历二叉树,当前结点有左节点或者右节点的时候,交换左右节点。然后可以递归的翻转左子树和右子树。
代码一:递归
public void Mirror(TreeNode root) {
if(root == null || (root.left == null && root.right == null)) return;
//交换左右孩子
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
Mirror(root.left);
Mirror(root.right);
}
代码二:利用栈
利用栈进行树的先序遍历,消除递归。
public void Mirror(TreeNode root) {
if(root == null) return;
Stack<TreeNode> stack = new Stack<>();
stack.add(root);
while(!stack.isEmpty()) {
TreeNode cur = stack.pop();
if(cur.left!=null)
stack.push(cur.left);
if(cur.right!=null)
stack.push(cur.right);
if(cur!=null && (cur.left!=null || cur.right !=null)) {
TreeNode temp = cur.left;
cur.left = cur.right;
cur.right = temp;
}
}
}
总结
题目比较简单,只需要搞清楚,翻转的条件——至少有一个孩子。