首页 > 编程语言 >算法——树(一)

算法——树(一)

时间:2023-06-15 17:11:33浏览次数:32  
标签:right TreeNode 算法 return null root left

1、中序遍历

递归

class Solution {
    List<Integer> ans=new ArrayList<>();
    public List<Integer> inorderTraversal(TreeNode root) {
        inorder(root);
        return ans;
    }
    public void inorder(TreeNode root){
        if(root!=null){
            inorder(root.left);
            ans.add(root.val);
            inorder(root.right);
        }
    }
}

  迭代:利用栈

 1 class Solution {
 2     public List<Integer> inorderTraversal(TreeNode root) {
 3         List<Integer> ans=new ArrayList<>();
 4         Deque<TreeNode> stack=new LinkedList<>();
 5         while(root!=null||!stack.isEmpty()){
 6 
 7             while(root!=null){
 8                 stack.push(root);
 9                 root=root.left;
10             }
11             root=stack.pop();
12             ans.add(root.val);
13             root=root.right;
14             
15         }
16         return ans;
17     }
18 }
View Code

2、两棵二叉树是否相同

 1 class Solution {
 2     public boolean isSameTree(TreeNode p, TreeNode q) {
 3         if(p==null&&q==null){
 4             return true;
 5         }else{
 6             if(p==null||q==null){
 7                 return false;
 8             }else{
 9                 if(p.val!=q.val){
10                     return false;
11                 }else{
12                     return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
13                 }
14             }
15         }
16     }
17 }
View Code

3、对称二叉树

 1 class Solution {
 2     public boolean isSymmetric(TreeNode root) {
 3         return helper(root,root);
 4 
 5     }
 6     public boolean helper(TreeNode root1,TreeNode root2){
 7         if(root1==null&&root2==null){
 8             return true;
 9         }else{
10             if(root1==null||root2==null){
11                 return false;
12             }else{
13                 if(root1.val!=root2.val){
14                     return false;
15                 }else{
16                     return helper(root1.left,root2.right)&&helper(root1.right,root2.left);
17                 }
18             }
19         }
20     }
21 }
View Code

4、二叉树的最大深度

1 class Solution {
2     public int maxDepth(TreeNode root) {
3         if(root==null)return 0;
4         else return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
5 
6     }
7 }
View Code

5、将有序数组转换为二叉搜索树

//选择升序序列的中间元素作为根节点
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return helper(nums,0,nums.length-1);
    }
    public TreeNode helper(int[] nums,int left,int right){
        TreeNode root=null;
        if(left<=right){
            int mid=left+(right-left)/2;
            root=new TreeNode(nums[mid]);
            root.left=helper(nums,left,mid-1);
            root.right=helper(nums,mid+1,right);
        }
        return root;
    }
}

 

6、判断给定二叉树是否为平衡二叉树

 1 class Solution {
 2     public boolean isBalanced(TreeNode root) {
 3         if(root==null)return true;
 4         else{
 5             if(Math.abs(maxDepth(root.left)-maxDepth(root.right))>1){
 6                 return false;
 7             }else{
 8                 return isBalanced(root.left)&&isBalanced(root.right);
 9             }
10         }
11 
12     }
13     public int maxDepth(TreeNode root){
14         if(root==null)return 0;
15         return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
16     }
17 }
View Code

7、二叉树的最小深度

 1 class Solution {
 2     public int minDepth(TreeNode root) {
 3         if(root==null)return 0;
 4         else{
 5             int m1=minDepth(root.left);
 6             int m2=minDepth(root.right);
 7             if(root.left==null||root.right==null)return m2+m1+1;
 8             return Math.min(m1,m2)+1;
 9         }
10 
11     }
12 }
View Code

 

标签:right,TreeNode,算法,return,null,root,left
From: https://www.cnblogs.com/coooookie/p/17483454.html

相关文章

  • 数据结构(python版)—— 2、前期知识与算法分析
    从C转到python(一)C:helloWorld!#include<stdio.h>​intmain(){//sayhelloprintf("HelloWorld!\n")}1-Compile编译到机器码2-Link与各种库链接3-Execute执行目标程序Python:HelloWorld!defmain():#sayhelloprint("HelloWorld!"......
  • 力扣上任务调度相关的算法
    目录应用应用1:Leetcode1834.单线程CPU题目分析代码实现应用2:Leetcode621.任务调度器题目分析代码实现应用应用1:Leetcode1834.单线程CPU题目1834.单线程CPU给你一个二维数组tasks,用于表示n项从0到n-1编号的任务。其中\(tasks[i]=[enqueueTime_i,proc......
  • 优化算法——人工蜂群算法(ABC)
    一、人工蜂群算法的介绍  人工蜂群算法(ArtificialBeeColony,ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜行为,蜜蜂根据各自的分工进行不同的活动,并实现蜂群信息的共享和交流,从而找到问题的最优解。人工蜂群算法属于群......
  • 简单易学的机器学习算法——岭回归(Ridge Regression)
    一、一般线性回归遇到的问题  在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在:预测精度:这里要处理好这样一对为题,即样本的数量和特征的数量时,最小二乘回归会有较小的方差时,容易产生过拟合时,最小二乘回归得不到有意义的结果模型的解释能力:如果模型中的特征......
  • 简单易学的机器学习算法——协同过滤推荐算法(1)
    一、推荐系统的概念  推荐系统(RecommendationSystem,RS),简单来说就是根据用户的日常行为,自动预测用户的喜好,为用户提供更多完善的服务。举个简单的例子,在京东商城,我们浏览一本书之后,系统会为我们推荐购买了这本书的其他用户购买的其他的书:推荐系统在很多方面都有很好的应......
  • C#中使用CAS实现无锁算法
    CAS的基本概念CAS(Compare-and-Swap)是一种多线程并发编程中常用的原子操作,用于实现多线程间的同步和互斥访问。它操作通常包含三个参数:一个内存地址(通常是一个共享变量的地址)、期望的旧值和新值。CompareAndSwap(内存地址,期望的旧值,新值)CAS操作会比较内存地址处的值与期望......
  • 高效的二进制取模算法
    限制必须是长度必须是2的指数直接取指数的低位长度算法演示长度为80b000(0)0b001(1)0b010(2)0b011(3)0b100(4)0b101(5)0b110(6)0b11(7)13二进制0x110113mod8=55的二进制1012^3=8直接取0x1101后三位101使用场景布谷鸟过滤器还有一种就......
  • 算法题总结-最长回文序列
    原题https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1?tpId=37&tqId=21255&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fdifficulty%3D3%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&am......
  • 算法学习day57动态规划part17-516、647
    packageLeetCode.DPpart17;/***516.最长回文子序列*给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度。*子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。**/publicclassLongestPalindromicSubsequence_51......
  • 算法学习day55动态规划part15-115、392
    packageLeetCode.DPpart15;publicclassDistinctSubsequences_115{publicintnumDistinct(Strings,Stringt){int[][]dp=newint[s.length()+1][t.length()+1];for(inti=0;i<s.length()+1;i++){dp[i][0]=......