• 剑指57.二叉树的下一个节点


    题目描述

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

    思路

    画图,分情况讨论。

    1)如果一个节点 有 右子树,打印右子树最左边的节点。

    2)一个节点 没有 右子树, 并且它还是它父节点的左孩子,直接打印它的父节点。

    3)一个节点 没有 右子树,并且它还是它父节点的右孩子,那么一直向上找,直到上级是上上级的左孩子。如果存在,打印这个节点的父节点。

     

    解法

    /*
    public class TreeLinkNode {
        int val;
        TreeLinkNode left = null;
        TreeLinkNode right = null;
        TreeLinkNode next = null;
    
        TreeLinkNode(int val) {
            this.val = val;
        }
    }
    */
    public class Solution {
        public TreeLinkNode GetNext(TreeLinkNode pNode) {
            if (pNode == null) return null;
            // 1.有右子树
            if (pNode.right != null){
                pNode = pNode.right;
                while (pNode.left != null){
                    pNode = pNode.left;
                }
                return pNode;
            }else{
                // 2.没有右子树,并且是左孩子,那么直接返回它的父节点
                if (pNode.next != null && pNode.next.left == pNode){ // 细节,必须先判断一下是否有父节点
                    return pNode.next;
                }
                // 3.没有右子树,并且是右孩子
                if (pNode.next != null && pNode.next.right == pNode){
                    while (pNode.next != null && pNode.next.left != pNode){
                        pNode = pNode.next;
                    }
                    return pNode.next;
                }
            }
            return null;
        }
    }
  • 相关阅读:
    纯JS实现俄罗斯方块,打造属于你的游戏帝国
    Java 集合框架
    项目(1-2)ES32获取mpu9250传入数据库
    项目(1-1)ES32获取mpu9250数据网页交互显示
    开发(三)ESP32 硬件配置
    开发(二) ardunio批量固件上传地址
    项目(1-1)人脸识别
    海康相机开发(1) SDK安装和开发
    ARDUNIO IMU processing姿态数据可视化
    ESP8266 tcp透传AP+STA
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/13621727.html
Copyright © 2020-2023  润新知