二叉树的镜像是指一个二叉树在镜面中的成像。
如下举个例子,即二叉树的镜像
思路清晰明了,从上到下遍历整棵树,若遇到子节点,则交换两个子结点。
递归的java代码如下:
class TreeNode{
int val=0;
TreeNode left=null;
TreeNode right=null;
public TreeNode(int val){
this.val=val;
}
}
public class Solution1 {
public void Mirror(TreeNode root) {
if(null==root)return;
if(null==root.left&&null==root.right)return;
TreeNode temp = root.left;
root.left=root.right;
root.right=temp;
if(root.left!=null){
Mirror(root.left);
}
if(root.right!=null){
Mirror(root.right);
}
}
}
非递归的写法省略了树结点的创建类,使用到了栈,应该用别的数据结构也可以,代码如下:import java.util.Stack;
public class Solution2 {
public void Mirror(TreeNode root) {
if(null==root)return;
Stack<TreeNode> s = new Stack<TreeNode>();
s.push(root);
while(s.size()!=0){
TreeNode p = s.peek();
s.pop();
if(p.left!=null||p.right!=null){
TreeNode temp=p.left;
p.left=p.right;
p.right=temp;
}
if(p.left!=null){
s.push(p.left);
}
if(p.right!=null){
s.push(p.right);
}
}
}
}
以上即为二叉树的镜像操作,希望批评指正,共同学习进步。