剑指Offer---面试题19:镜像二叉树
来源:互联网 发布:系统内存优化级别默认 编辑:程序博客网 时间:2024/05/16 06:13
一.题目
操作给定的二叉树,将其变换为源二叉树的镜像。
public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;public TreeNode(int val) { this.val = val;}}
二.分析
以题目中的两棵树为例:
就是先序遍历这棵树,如果当前正在遍历的节点有子结点(无论是左还是右),就交换两个子节点,当交换完所有的非叶子结点的左右子结点的时候,就得到了树的镜像.
具体过程如下所示:
注意6和10交换之后,第三层结点的排列顺序
三.代码
递归实现:
public void Mirror(TreeNode root) { //递归 if(root==null||(root.left==null&&root.right==null)){ return; } //swap TreeNode tmpNode=root.left; root.left=root.right; root.right=tmpNode; if(root.left!=null){ Mirror(root.left); } if(root.right!=null){ Mirror(root.right); }}
非递归实现:
public void Mirror(TreeNode root) { if(root==null||(root.left==null&&root.right==null)){ return; } //用于存放结点 Stack <TreeNode> stack=new Stack<TreeNode>(); stack.push(root); while(!stack.isEmpty()){ TreeNode node=stack.pop(); if(node.left!=null||node.right!=null){//只要该节点有子节点,就交换子节点位置 //swap TreeNode tmpNode=node.left; node.left=node.right; node.right=tmpNode; } //将左节点入栈 if(node.left!=null){ stack.push(node.left); } //将右节点入栈 if(node.right!=null){ stack.push(node.right); } }}
0 0
- [剑指offer][面试题19]二叉树的镜像
- 【剑指offer】面试题19:二叉树的镜像
- 剑指offer 面试题19 二叉树的镜像
- 剑指Offer:面试题19 二叉树的镜像
- 《剑指Offer》面试题19:二叉树的镜像
- 剑指offer-面试题19:二叉树的镜像
- 剑指Offer----面试题19:二叉树的镜像
- 剑指offer面试题19:二叉树的镜像
- 剑指offer面试题19:二叉树的镜像
- 剑指offer面试题19:二叉树的镜像
- 剑指offer--面试题19:二叉树的镜像
- 剑指Offer---面试题19:镜像二叉树
- 剑指offer-面试题19-二叉树的镜像
- 【剑指offer】面试题19:二叉树的镜像
- 【面试题】剑指Offer-19-二叉树的镜像
- 剑指offer-面试题19-二叉树的镜像
- 剑指offer-面试题 19:二叉树的镜像
- 剑指offer 面试题19 二叉树的镜像
- stat函数组
- Python中的字典,列表,元组笔记
- 利用jsoup解析html
- 17.OpenGL--替换纹理图像的全部或一部分
- 剑指offer刷题笔记(4)
- 剑指Offer---面试题19:镜像二叉树
- Oracle instant client及pl sql developer的使用
- 透视学的应用(九)
- 事务四大特征:原子性,一致性,隔离性和持久性(ACID),四大acid
- Office 365之SharePoint文档库新UI
- 获取Linux内核未导出符号的几种方式
- 18.OpenGL--多级纹理
- VB6下利用API计算MD2 MD4 MD5 SHA1
- golang thrift 总结一下网络上的一些坑