leetcode 226 :Invert Binary Tree
2015-07-04 11:41
302 查看
题目:
Invert a binary tree.
4
/ \
2 7
/ \ / \
1 3 6 9
to
4
/ \
7 2
/ \ / \
9 6 3 1
分析:
本题是对二叉树的操作,题目要求将二叉树反转,可以有递归和非递归两种实现方法,在编写测试用例的时候,需要构建二叉树和遍历二叉树,所以在代码中一致列出。
代码:
Invert a binary tree.
4
/ \
2 7
/ \ / \
1 3 6 9
to
4
/ \
7 2
/ \ / \
9 6 3 1
分析:
本题是对二叉树的操作,题目要求将二叉树反转,可以有递归和非递归两种实现方法,在编写测试用例的时候,需要构建二叉树和遍历二叉树,所以在代码中一致列出。
代码:
import java.util.LinkedList; import java.util.Queue; public class handleBinaryTree { private TreeNode root; /** * 定义节点类 * @author Don * */ public static class TreeNode{ int val; TreeNode left; TreeNode right; TreeNode(int x){val=x;} } /** * 构造函数 */ public handleBinaryTree(){root=null;} /** * 构造二叉树 */ public void buildBinaryTree(TreeNode node,int val){ if(root==null){ root=new TreeNode(val); }else{ if(val<node.val){ if(node.left==null){ node.left=new TreeNode(val); }else{ buildBinaryTree(node.left,val); } }else{ if(node.right==null){ node.right=new TreeNode(val); }else{ buildBinaryTree(node.right,val); } } } } /** * 先序遍历 * @param node */ public void preOrder(TreeNode node){ if(node!=null){ System.out.print(node.val+"."); preOrder(node.left); preOrder(node.right); } } /** * 中序遍历 * @param node */ public void inOrder(TreeNode node){ if(node!=null){ inOrder(node.left); System.out.print(node.val+"."); inOrder(node.right); } } /** * 后序遍历 * @param node */ public void postOrder(TreeNode node){ if(node!=null){ postOrder(node.left); postOrder(node.right); System.out.print(node.val+"."); } } /** * 层序遍历 * @param node */ public void levelOrder(TreeNode node){ if(root==null) return; Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.offer(root); while(!queue.isEmpty()){ TreeNode temp=queue.poll(); System.out.print(temp.val+"."); if(temp.left!=null) queue.add(temp.left); if(temp.right!=null) queue.add(temp.right); } } /** * 二叉树反转递归实现 * @param node */ public TreeNode invert(TreeNode node){ if(node==null) return null; TreeNode left=node.left; TreeNode right=node.right; node.left=invert(right); node.right=invert(left); return node; } /** * 二叉树反转非递归实现 * @param node * @return */ public TreeNode invertqueue(TreeNode node){ if(node==null){ return null; } Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.offer(node); if(!queue.isEmpty()){ TreeNode temp=queue.poll(); TreeNode left=node.left; node.left=node.right; node.right=left; if(node.left!=null){ queue.offer(node.left); } if(node.right!=null){ queue.offer(node.right); } } return node; } public static void main(String[] args){ int[] a={4,2,7,1,3,6,9}; handleBinaryTree tree=new handleBinaryTree(); for(int i=0;i<a.length;i++){ tree.buildBinaryTree(tree.root, a[i]); } tree.invertqueue(tree.root); System.out.println("levelOrder:"); tree.levelOrder(tree.root); } }
相关文章推荐
- subversion和客户端的应用
- BZOJ2565 最长双回文串
- Git教程学习(四)
- 用URL浏览图片
- 解决angular 与django的冲突
- java基础之java的基本了解
- Android中数据库的创建和使用
- UVA - 1347 Tour
- 能量英语(四) 之 “信念”
- C#基础之类的出现
- Win10 Build 10164泄露 已开始始接受第一阶段测试
- java动态代理详解,并用动态代理和注解实现日志记录功能
- 监听listview中item有控件点击事件的变化,更新listview
- Roman to Integer
- 关于java初始化的问题
- php面向对象编程--接口
- 图像质量评价指标之Matlab实现
- STM32接收串口数据-输出PWM
- php和mysql web开发学习记录
- 就社会实践名单公布及看师姐文档有感