首页 > 编程语言 >算法总结

算法总结

时间:2022-09-03 22:33:48浏览次数:63  
标签:总结 遍历 TreeNode res 中序 算法 root 节点

1.展平二叉搜索树

给你一棵二叉搜索树,请 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。

题解:题都说了用中序遍历,用一个链表存储中序遍历的结果,然后将中序遍历中值放入创建的新树(中序遍历是先访问左子树,然后根节点,然后右子树)

package com.chenghaixiang.jianzhi2.day17;

import java.util.LinkedList;
import java.util.List;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office52 {
}
//给你一棵二叉搜索树,请 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。
class Solution01 {
    public TreeNode increasingBST(TreeNode root) {
        //存放中序遍历的结果集
        List<Integer> res=new LinkedList<>();
        //中序遍历
        dfs(root,res);

        //创建一个新树
        TreeNode newtree=new TreeNode(-1);
        TreeNode currnode=newtree;
        for(int num:res){
            currnode.right=new TreeNode(num);
            currnode=currnode.right;
        }
        return newtree.right;
    }

    //中序遍历
    void dfs(TreeNode node,List<Integer> res){
        if(node==null){
            return;
        }
        dfs(node.left,res);
        res.add(node.val);
        dfs(node.right,res);
    }
}
View Code

2.二叉搜索树中的中序后继

给定一棵二叉搜索树和其中的一个节点 p ,找到该节点在树中的中序后继。如果节点没有中序后继,请返回 null 。

节点 p 的后继是值比 p.val 大的节点中键值最小的节点,即按中序遍历的顺序节点 p 的下一个节点。

package com.chenghaixiang.jianzhi2.day18;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office53 {
}
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}
//给定一棵二叉搜索树和其中的一个节点 p ,找到该节点在树中的中序后继。如果节点没有中序后继,请返回 null 。
//
//节点 p 的后继是值比 p.val 大的节点中键值最小的节点,即按中序遍历的顺序节点 p 的下一个节点。

//中序遍历是左子树->根节点->右子树
//中序后继简单来说就是中序遍历中当前结点p的后一个结点,如一个中序遍历是1,2,3,结点p是2,这中序后继为3
class Solution {
    public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
        TreeNode res=null;
        //利用二叉搜索树的特点:左子树比根节点和右子树小
        //节点p的中心后继一定比p大
        while (root!=null){
            //根节点大于P的val,则找它的左子树,一直顺延找下去,才能找到第一个大于P->val的节点,并更新节点
            if(root.val>p.val){
                res=root;
                root=root.left;
            }else {
                root=root.right;
            }
        }
        return res;
    }
}
View Code

 

标签:总结,遍历,TreeNode,res,中序,算法,root,节点
From: https://www.cnblogs.com/chenghaixiang/p/16653852.html

相关文章

  • ABC267总结
    比赛链接比赛情况AC:6/8题目分析A(语法入门)打表周一到周五即可B(基础算法)按照题意计算即可假如1号球没倒,则非法否则分别找最左和最右分别没倒的列,判断中间是否有一......
  • 【总结】树上启发式合并
    author:abc1763613206,cesonic,Ir1d,MingqiHuang,xinchengo引入启发式算法是什么呢?启发式算法是基于人类的经验和直观感觉,对一些算法的优化。给个例子?最常见的就......
  • 9.2考试总结
    话不多说,先上代码;怎么说,照猫画虎,不得其精髓;既不得其精,自然需要提炼重点,由点到面系统性的学习。这次的考试仅仅是一个开始,通过不断地参与考试,不断地练习题目,不断地发现自己......
  • linux 关机命令总结
    linux关机命令总结-wanggd_blog-博客园 https://www.cnblogs.com/wanggd/archive/2013/07/08/3177398.htmllinux下常用的关机命令有:shutdown、halt、poweroff、ini......
  • 2022-2023-1 20221402 《计算机基础与程序设计》第一周学习总结
    班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP?filter=all作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01作业目标:快速浏览一遍教材计......
  • 我的第一本算法书 第二三四章
    第2章排序2.1什么是排序将输入的数字按照从小到大的顺序进行排列2.2冒泡排序从右开始,两两比较.逐渐将最小值移动到最左侧再从最左侧逐步往左移动,直至所有数......
  • 本周总结(Docker)
    FROMcentosMAINTAINERzzx<[email protected]>ADDjdk-8u212-linux-x64.tar.gz/usr/localADDapache-tomcat-9.0.65.tar.gz/usr/localRUNyum-yinstallvimEN......
  • 算法-小红书2020校招前端笔试题卷三
     薯队长写了一篇笔记草稿,请你帮忙输出最后内容。 1.输入字符包括,"("    ,    ")"    和    "<"和其他字符。 2.其他字符表示笔记内容。 3.()之间......
  • 9.2课堂测试总结
    本次课堂测试并没有取得理想的成绩,意识到自己在假期自学的不足之处。我平时的态度不够端正,并没有进行有效的练习,导致有很多知识并没有掌握,以至于见到没有做过的题目就手忙......
  • YOLO算法的学习
            YOLOV1置信度(confidence):当前点所对应的候选框,是否是物体。√网络架构   注:7*7*30:7*7的格子,每个格子当中有30个值,每个格子产生两种候......