服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 剑指Offer之Java算法习题精讲二叉树专题篇上

剑指Offer之Java算法习题精讲二叉树专题篇上

2022-10-08 15:28明天一定. Java教程

跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化

来和二叉树玩耍吧~

题目一

剑指Offer之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);
  }
}

 

题目二

剑指Offer之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 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;
  }
}

 

题目三

剑指Offer之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 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;
  }
}

 

题目四

剑指Offer之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 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);
  }
}

 

题目五

剑指Offer之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 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;
  }
}

到此这篇关于剑指Offer之Java算法习题精讲二进制专题篇的文章就介绍到这了,更多相关Java 二进制内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/wai_58934/article/details/123532571

延伸 · 阅读

精彩推荐