剑指offer——树的镜像(基础,同样是考察遍历树的循环或递归)
来源:互联网 发布:淘宝客服聊天流程 编辑:程序博客网 时间:2024/05/29 15:42
题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
思路:
使用递归,先到最低层,然后一层层往上交换。
注意为null的元素要直接return
public class Solution { public void Mirror(TreeNode root) { if(root==null) return ; if(root.left!=null||root.right!=null){ Mirror(root.left); Mirror(root.right); } // 如果root的左右节点都是null,也会进入这个方法,会增加时间复杂度,不好 TreeNode temp = root.left; root.left = root.right; root.right = temp; }}
也可以先交换,再递归
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); }
或者不用递归做,用栈来存储节点(整体思路类似前序遍历)
import java.util.*;public class Solution { Stack<TreeNode> stack = new Stack<>(); public void Mirror(TreeNode root) { if(root==null) return ; stack.push(root); while(!stack.empty()){ root = stack.pop(); TreeNode temp = root.left; root.left = root.right; root.right = temp; if(root.right!=null) stack.push(root.right); if(root.left!=null) stack.push(root.left); } }}
阅读全文
0 0
- 剑指offer——树的镜像(基础,同样是考察遍历树的循环或递归)
- 剑指offer面试题:求二叉树的镜像(递归、循环解法及测试用例)
- 【剑指offer】二叉树的镜像(递归+非递归)
- 剑指offer面试题19二叉树的镜像和二叉树的前中后遍历递归和非递归算法
- 剑指offer面试题19二叉树的镜像和二叉树的前中后遍历递归和非递归算法
- 二叉树的镜像(剑指offer+递归)抽象问题具体化
- 《剑指offer》——二叉树的镜像
- 《剑指offer》——二叉树的镜像
- 剑指offer——二叉树的镜像
- 剑指offer——二叉树的镜像
- 剑指offer——二叉树的镜像
- 剑指Offer——二叉树的镜像
- 剑指Offer——二叉树的镜像
- 剑指offer——二叉树的镜像
- 剑指Offer—18—二叉树的镜像
- 剑指offer—二叉树的镜像
- 剑指offer(18)—二叉树的镜像
- 剑指offer—二叉树的镜像
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)
- Maven+eclipse+Java+cucumber测试框架运行测试的一种运行方式
- 重定向与转发的区别
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
- 使用register_shutdown_function实现php项目脚本执行失败的实时报警
- 剑指offer——树的镜像(基础,同样是考察遍历树的循环或递归)
- Text 组件
- JSP
- java api操作远程hadoop集群
- 由浅入深JavaScript9基础-Dom综合实例1
- 封装:Eclipse油藏数值模拟源文件解析封装
- C语言可变参数--va_list、va_start、va_arg、va_end
- Screen, Viewport 和 Rect 浅析
- Boolan STL与泛型编程 第四周笔记