首页 > 编程语言 >每日算法之二叉树的下一个结点

每日算法之二叉树的下一个结点

时间:2022-11-27 10:22:06浏览次数:37  
标签:结点 val TreeLinkNode 算法 二叉树 null root 节点

JZ8二叉树的下一个结点

描述

给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。

示例:
输入:{8,6,10,5,7,9,11},8
返回:9
解析:这个组装传入的子树根节点,其实就是整颗树,中序遍历{5,6,7,8,9,10,11},根节点8的下一个节点就是9,应该返回{9,10,11},后台只打印子树的下一个节点,所以只会打印9

具体做法:

step 1:首先先根据当前给出的结点找到根节点
step 2:然后根节点调用中序遍历
step 3:将中序遍历结果存储下来
step 4:最终拿当前结点匹配是否有符合要求的下一个结点

代码

package mid.JZ8二叉树的下一个结点;

import java.util.ArrayList;

class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}

public class Solution {
    ArrayList<TreeLinkNode> nodes = new ArrayList<>();

    public TreeLinkNode GetNext(TreeLinkNode pNode) {

        TreeLinkNode root = pNode;
        //获取根节点
        while (root.next != null) root = root.next;

        //获取中序遍历集合
        inOrder(root);

        //匹配
        for (int i = 0; i < nodes.size() - 1; i++) {
            if (pNode.val == nodes.get(i).val) {
                return nodes.get(i + 1);
            }
        }
        return null;
    }

    public void inOrder(TreeLinkNode root) {
        if (root != null) {
            inOrder(root.left);
            nodes.add(root);
            inOrder(root.right);
        }
    }
}

标签:结点,val,TreeLinkNode,算法,二叉树,null,root,节点
From: https://www.cnblogs.com/loongnuts/p/16929082.html

相关文章

  • 字符串模式匹配算法 C++
    #include<iostream>#include<vector>#include<string>usingnamespacestd;//处理模式串,每一个位置都赋值为已匹配的位数vector<int>next_pos(stringpattern){ ......
  • 数据结构与算法-稀疏数组
    稀疏数组当一个数组中大部分元素为0,或者为同一个数值时,可以使用稀疏数组来保存该数组稀疏数组的处理方法是:​ 1.记录数组一共有几行几列,有多少不同的值​ 2.把具有......
  • 斐波那契数的矩阵算法及 python 实现
    importnumpyasnpimportmatplotlib.pyplotaspltfromfunctoolsimportreducefromsympyimportsqrt,simplify,fibonacciimportsympy斐波那契数的矩阵形式......
  • 剑指offer——Day15 搜索与回溯算法(中等)
    Day152022.11.21搜索与回溯算法(中等)34.二叉树中和为某一值的路径自己实现用递归。递归函数的思路:首先是递归出口root==NULL时返回-1,告诉上层节点这个地方是NULL,以便......
  • 二叉树的简单学习
    【概念】先序:根、左、右中序:  左、根、右后序:  左、右、根【代码】packagecom.company;importjava.util.*;importjava.util.stream.Collectors;/***二叉树节......
  • 【语音SBC算法】基于正交滤波器组的语音SBC算法设计与实现
    数字语音编码是现代数字语音通信以及数字语音存储回放的前提和基础,对数字语音通信系统和数字语音存储回放系统的性能具有决定性的作用。目前,主要从编码速率、时延、语音回......
  • 回溯算法
    算法思想回溯实际上是一种试探算法,这种算法跟暴力搜索最大的不同在于,在回溯算法里,是一步一步地小心翼翼地进行向前试探,会对每一步探测到的情况进行评估,如果当前的情况已经......
  • #yyds干货盘点# 动态规划专题:加分二叉树
    1.简述:描述设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第j个节点的分数为di,tree及它的每个子树都有......
  • 基于蚁群算法的多配送中心的车辆调度问题的研究附Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进。......
  • 细分图中的可到达节点 Dijkstra算法Python实现
    题目大意个无向图(原始图)中有n个节点,编号从0到n-1。对每条边增加若干节点构建“细分图”,求解从节点0出发能抵达的不超过距离为maxMove的节点数量。输入:edges=[......