二叉树的镜像
程序员文章站
2022-06-01 08:43:07
...
【牛客】求出二叉树的镜像
链接:
原题出处
来源:牛客网
其实我是看了大佬的博客:
大佬解说
操作给定的二叉树,将其变换为源二叉树的镜像。
有两种实现方式:
递归:
想象一下,加入只有三个结点,根结点,左孩子,右孩子
那么就交换左右孩子。
出口条件:
节点为空或者左右孩子都为空
//递归
public void Mirror(TreeNode root) {
if(root == null){
return;
}
//这里和非递归的条件很类似,都是说了一件事,只要有一个不为空,我就要交换(空和非空也有左右对称嘛)
if(root.left==null&&root.right==null){
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);
}
}
非递归:
递归其实就是栈的入栈出栈,我们可以利用栈的特性对结点进行操作。
//非递归
public void Mirror(TreeNode root) {
if(root == null){
return;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode node = stack.pop();
//这个条件映衬了上面所说的话
if(node.left!=null||node.right!=null){
TreeNode temp = node.left;
node.left = node.right;
node.right = temp;
}
//其实递归就是栈的入栈出栈,所以代码很相似
if(node.left!=null){
stack.push(node.left);
}
if(node.right!=null){
stack.push(node.right);
}
}
}