剑指Offer之Java算法习题精讲二叉树专题篇上
时间:2022-09-12 10:15:56|栏目:JAVA代码|点击: 次
来和二叉树玩耍吧~????????????????
题目一
解法
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public boolean isSymmetric(TreeNode root) { return method(root.left,root.right); } public boolean method(TreeNode l,TreeNode r){ if(l==null&&r==null) return true; if(l==null||r==null||l.val!=r.val) return false; return method(l.left,r.right)&&method(l.right,r.left); } }
题目二
解法
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode sortedArrayToBST(int[] nums) { return method(nums,0,nums.length-1); } public TreeNode method(int[] nums,int l,int r){ if(l>r) return null; int mid = l+(r-l)/2; TreeNode root = new TreeNode(nums[mid]); root.left = method(nums,l,mid-1); root.right = method(nums,mid+1,r); return root; } }
题目三
解法
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public boolean isBalanced(TreeNode root) { if(root==null) return true; return Math.abs(method(root.left)-method(root.right))<=1&&isBalanced(root.left)&&isBalanced(root.right); } public int method(TreeNode root){ if(root==null) return 0; return Math.max(method(root.left),method(root.right))+1; } }
题目四
解法
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public boolean hasPathSum(TreeNode root, int targetSum) { if(root==null) return false; if(root.left == null && root.right == null) return targetSum==root.val; return hasPathSum(root.left,targetSum-root.val)||hasPathSum(root.right,targetSum-root.val); } }
题目五
解法
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode invertTree(TreeNode root) { if(root==null) return null; TreeNode node = new TreeNode(root.val); node.right = invertTree(root.left); node.left = invertTree(root.right); return node; } }
栏 目:JAVA代码
下一篇:Java中守护线程介绍及使用
本文标题:剑指Offer之Java算法习题精讲二叉树专题篇上
本文地址:http://www.codeinn.net/misctech/213493.html