解决二叉树的问题,经常要习惯从递归角度思考
左子树/右子树是否具备某属性、是否属于什么类型(和题目要求的判断当前树是否xxx一样);
对左/右子树进行什么操作(和题目要求的对当前树的操作一样)。
226.翻转二叉树
class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; } TreeNode left = invertTree(root.left); TreeNode right = invertTree(root.right); root.left = right; root.right = left; return root; } }
101.对称二叉树
class Solution { public boolean isSymmetric(TreeNode root) { //左节点和右节点是否相等 //左节点的左子树和右节点的右子树是否对称 //左节点的右子树和右节点的左子树是否对称 return check(root.left,root.right); } public boolean check(TreeNode root1,TreeNode root2){ if (root1==null && root2==null) return true; if (root1==null || root2==null) return false; if (root1.val!=root2.val) return false; return check(root1.left,root2.right) && check(root1.right,root2.left); } }
还没有评论,来说两句吧...