首页 > 其他分享 >Day15 二叉树part05| LeetCode 654.最大二叉树,617.合并二叉树 ,700.二叉搜索树中的搜索,98.验证二叉搜索树

Day15 二叉树part05| LeetCode 654.最大二叉树,617.合并二叉树 ,700.二叉搜索树中的搜索,98.验证二叉搜索树

时间:2024-09-16 15:14:18浏览次数:11  
标签:TreeNode 二叉 搜索 二叉树 return root

654.最大二叉树

654. 最大二叉树

class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
   if(nums.length==1)//遍历到了叶子节点
            {
                    return new TreeNode(nums[0]);
            }

            int maxValue=nums[0];
            int maxIndex=0;
            for(int i=0;i<nums.length;i++)
            {
                if(nums[i]>maxValue)
                {
                    maxValue=nums[i];
                    maxIndex=i;
                }

            }
            TreeNode node=new TreeNode(maxValue);
            if(maxIndex>0)
            {
                int[] leftnums=new int[maxIndex];
                for(int i=0;i<maxIndex;i++)
                {
                    leftnums[i]=nums[i];
                }
                node.left=constructMaximumBinaryTree(leftnums);
            }
            if(maxIndex<nums.length-1)
            {
                int[] rightnums=new int[nums.length-maxIndex-1];
                int j=0;
                for(int i=maxIndex+1;i<nums.length;i++)
                {
                    rightnums[j]=nums[i];
                    j++;
                }
                node.right=constructMaximumBinaryTree(rightnums);
            }
           return node;
        }
    
}

617.合并二叉树

617. 合并二叉树

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
  if(root1==null) return root2;
            if(root2==null) return root1;

            root1.val+=root2.val;
            root1.left=mergeTrees(root1.left,root2.left);
            root1.right=mergeTrees(root1.right,root2.right);
            return root1;

        }
    }

700.二叉搜索树中的搜索

  • 二叉树是一个有序树

    • 若左子树不空,则左子树上所有节点的值均小于根节点

    • 若右子树不空,则右子树上所有节点的值均大于根节点

700. 二叉搜索树中的搜索

  class Solution {
        public TreeNode searchBST(TreeNode root, int val) {

            if(root==null||root.val==val)
                return root;

            TreeNode result=null;
            if(root.val<val) result=searchBST(root.right,val);
            if(root.val>val) result=searchBST(root.left,val);
            return result;
        }
    }

98.验证二叉搜索树

98. 验证二叉搜索树

  • 有效的二叉搜索树
    • 节点的左子树只包含小于当前节点的值
    • 节点的右子树只包含大于当前节点的值
    • 所有左子树和右子树自身也必须是二叉搜索树
  • 方法一:中序遍历,将二叉搜索树转变成一个数组,判断该数组是否递增,且元素不重复
 class Solution {
       public  List<Integer>  res = new ArrayList<>();
        void traversal(TreeNode root)
        {
            if(root==null) return ;

            traversal(root.left);s
            res.add(root.val);
            traversal(root.right);
        }

        public boolean isValidBST(TreeNode root) {

           traversal(root);
           for(int i=1;i<res.size();i++)
           {
               if(res.get(i)<=res.get(i-1))
                   return false;
               
               
           }
           return true;
        }
    }

方法二:

class Solution {

     TreeNode pre=null;


        public boolean isValidBST(TreeNode root) {

          if(root==null) return true;


          boolean left=isValidBST(root.left);

          if(pre!=null&&pre.val>=root.val) return false;
          pre=root;
          boolean right=isValidBST(root.right);
          return left&&right;

        }
    }

标签:TreeNode,二叉,搜索,二叉树,return,root
From: https://www.cnblogs.com/FreeDrama/p/18416289

相关文章

  • Java-数据结构-二叉树-习题(二) (´▽`)ノ
    文本目录:❄️一、习题一(分层遍历):   ▶ 思路:    ▶代码:❄️二、习题二(二叉树的最近公共祖先):    ▶ 思路: ▶代码: ❄️三、习题三(从前序和中序遍历序列中构造二叉树):     ▶ 思路:  ▶代码:❄️四、习题四(从中序和后序遍历序列中构造二......
  • 使用 O(1) 额外内存删除二叉树
    这是一个naive的做法:voiddeleteTreeRec(TreeNode*root){if(root==NULL)return;deleteTreeRec(root->left);deleteTreeRec(root->right);cout<<"Deletingnode"<<root->data<<endl;deleteroot;}O(1)空......
  • 力扣热题100 - 二叉树:二叉搜索树中第 K 小的元素
    题目描述:题号:230给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从1开始计数)。解题思路:思路一:中序遍历二叉树+ 计数根据二叉搜索树的性质,中序遍历得到的节点的顺序是从小到大递增的。所以可以一边中序遍历,一边计数......
  • PanSoo盘搜,百度网盘、阿里云盘、夸克网盘、迅雷网盘UC网盘资源搜索神器-2024年好用的
    ......
  • 力扣热题100 - 二叉树:二叉树展开为链表
    题目描述:题号:114给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。解题思路:思路一:前序遍历后......
  • 代码随想录算法训练营,9月16日 | 235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插
    235.二叉搜索树的最近公共祖先题目链接:235.二叉搜索树的最近公共祖先文档讲解︰代码随想录(programmercarl.com)视频讲解︰二叉搜索树的最近公共祖先日期:2024-09-16想法:相比于普通二叉树,二叉搜索树从上往下遍历,在qp中间的值的一定是公共祖先,而第一个则是最近,因为此时你在这个祖......
  • 禁忌搜索算法(TS算法)求解实例---旅行商问题 (TSP)
    目录一、采用TS求解TSP二、旅行商问题2.1实际例子:求解6个城市的TSP2.2==**求解该问题的代码**==2.3代码运行过程截屏2.4代码运行结果截屏(后续和其他算法进行对比)三、==如何修改代码?==3.1减少城市坐标,如下:3.2增加城市坐标,如下:四、禁忌搜索算法(TabuSearc......
  • C++数据结构-二叉树的三种遍历方法(进阶篇)
    1.遍历简介:树作为非线性数据结构,在我们取出数据时就需要设计遍历,所谓遍历,就是按照一定的规则性,将数据结构中的所有数据全部依次访问,而二叉树本身并不具有天然的全局次序,故为实现遍历,需通过在各节点与其孩子之间约定某种局部次序,间接地定义某种全局次序,这便是我们常规定的先序......
  • C++数据结构-二叉树的存储方法(基础篇)
    1.简介根据前文的介绍,我们知道了二叉树的性值,其就是一种每一个结点中只允许拥有左右孩子(或为空)的树,这种数据结构在我们的实际设计中非常常用,如前文提到的STL中的set集合,其底层就是一颗标准的红黑树(二叉树的一种),我们这里以创建一颗二叉树并实现通过特定的插入顺序和读取顺序达......
  • 纯C 生成二叉树广义表 根据广义表重构二叉树
    讲解很多都写在注释里了,重构二叉树的过程后面单独拿出来讲直接上代码:#include<stdio.h>#include<time.h>#include<stdlib.h>#include<limits.h>typedefstructBiTree{ intdata; structBiTree*next[2];}BiTree;BiTree*BiTree_init(intval)//节点初始化{......