LeetCode 154题:Symmetric Tree
来源:互联网 发布:怎么判断端口是否连通 编辑:程序博客网 时间:2024/05/21 07:05
原题目:
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / \ 2 2 / \ / \3 4 4 3But the following is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
解决办法:
第一反应是想中序遍历,比如说Symmetric Tree的中序遍历结果肯定是一个对称的字符串(3241423),显然这个过程是不可逆的,后来想如果还提供树的高度可不可以可逆,画了一下发现是不行,比如说下面这个过程:
1 1 / \ / \ 2 2 ==> 32123 ==> 3 2 / \ \ \3 3 2 3
还是老老实实递归好了,代码如下:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public boolean isSymmetric(TreeNode root) { if(null == root) return true; return isSymmetric(root.left, root.right); } private boolean isSymmetric(TreeNode leftOne, TreeNode rightOne) { if(leftOne == null && rightOne == null) return true; if((leftOne == null && rightOne != null) || (leftOne != null && rightOne == null)) return false; return isSymmetric(leftOne.left, rightOne.right) && isSymmetric(leftOne.right, rightOne.left) && leftOne.val == rightOne.val; }}
既然递归实现了,那么循环加栈就简单了:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public boolean isSymmetric(TreeNode root) { if(null == root) return true; if(root.left == null || root.right == null) return root.left == null && root.right == null; Stack<TreeNode> treeNodes = new Stack<TreeNode>(); treeNodes.push(root.left); treeNodes.push(root.right); while(treeNodes.size() > 0) { TreeNode right = treeNodes.pop(); TreeNode left = treeNodes.pop(); if((left == null && right != null) || (left != null && right == null)) return false; if(left != null && right != null) { if(left.val != right.val) return false; treeNodes.push(left.left); treeNodes.push(right.right); treeNodes.push(left.right); treeNodes.push(right.left); } } return true; }}
0 0
- LeetCode 154题:Symmetric Tree
- Leetcode - Tree - Symmetric Tree
- Leetcode - Tree - Symmetric Tree
- LeetCode[Tree]: Symmetric Tree
- [leetcode][tree] Symmetric Tree
- [leetcode刷题系列]Symmetric Tree
- LeetCode刷题笔录Symmetric Tree
- leetcode 第101题 Symmetric tree
- leetcode 每日一题 101. Symmetric Tree
- LeetCode: Symmetric Tree
- [Leetcode] Symmetric Tree
- LeetCode : Symmetric Tree
- leetcode 13:symmetric tree
- [LeetCode] Symmetric Tree - Recursively
- [LeetCode] Symmetric Tree - Iteratively
- [LeetCode] Symmetric Tree
- [LeetCode]Symmetric Tree
- Leetcode:Symmetric Tree
- phalcon js压缩debug模式和非debug模式
- Centos6.5安装中文输入法
- java中关键字volatile的作用
- Jsoup详解
- backbone view视图
- LeetCode 154题:Symmetric Tree
- 在 Transact-SQL 中使用 TRY...CATCH XACT_STATE
- JBoss as 配置
- 数据结构笔记——第五章 树和二叉树
- Allegro进行PCB级的信号完整性仿真
- 理解Thread.interrupt()的含义
- Spring进阶学习一
- 单双引号
- C++创建对象的两种方法