leetcode 226 :Invert Binary Tree
来源:互联网 发布:linux代码学习 编辑:程序博客网 时间:2024/04/29 00:35
题目:
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); }}
0 0
- Leetcode[226]-Invert Binary Tree
- LeetCode 226 Invert Binary Tree
- Invert Binary Tree - LeetCode 226
- leetcode[226]:Invert Binary Tree
- leetcode 226: Invert Binary Tree
- Leetcode 226 Invert Binary Tree
- leetcode-226-Invert Binary Tree
- leetcode 226 :Invert Binary Tree
- LeetCode 226Invert Binary Tree
- leetCode #226 Invert Binary Tree
- [LeetCode 226] Invert Binary Tree
- Leetcode #226 Invert Binary Tree
- leetcode 226: Invert Binary Tree
- leetcode: (226) Invert Binary Tree
- LeetCode 226----Invert Binary Tree
- LeetCode 226: Invert Binary Tree
- leetcode 226--Invert Binary Tree
- 【LEETCODE】226-Invert Binary Tree
- java基础之java的基本了解
- Android中数据库的创建和使用
- UVA - 1347 Tour
- 用URL浏览图片
- 能量英语(四) 之 “信念”
- leetcode 226 :Invert Binary Tree
- CFStringTransform的使用 :汉字转拼音、全角转半角等
- 用wireshark解析应用层存储包
- 可记住用户名和密码的登录界面
- 详细解说STL string
- 背景音乐
- Oracle 存储过程创建和执行入门实例
- C++ Primer学习笔记(7)——指针形参和引用形参的比较
- 关于SoftReference,WeakReference的简单了解