zoukankan      html  css  js  c++  java
  • [编程题] JZ57 二叉树的下一个节点

    [编程题] JZ57 二叉树的下一个节点

    题目描述

    image-20200725170725222

    参考

    参考讲解

    思路

    主要根据中序遍历二叉树的特点:

    • 如果此节点有右子树,就循环找出该右子树的最深处的左子树。
    • 如果此节点无右子树,则返回的就应该是其父亲节点(这里存在一直往上返回其父节点。)

    代码

    /*
    public class TreeLinkNode {
        int val;
        TreeLinkNode left = null;
        TreeLinkNode right = null;
        TreeLinkNode next = null;
    
        TreeLinkNode(int val) {
            this.val = val;
        }
    }
    */
    public class Solution {
        
        /*
        思路:根据二叉树的中序遍历特点:
        1、如果二叉树当前节点有右子树,那么返回的是当前节点的右子树的左子树
        2、如果当前节点无右子树(pNode=pNode.next.left),返回当前节点的父节点
        */
        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;
            }
            
            //2、如果当前节点无右子树,返回当前节点的父节点
            while(pNode.next!=null){
                if(pNode.next.left==pNode){  //注意理解
                    return pNode.next;
                }
                pNode = pNode.next;
            }
            
            //3 题目中其实最后一个中序遍历的节点是null的
            return null;
        }
    }
    
  • 相关阅读:
    Ubuntu的网络共享
    一次网络请求是如何实现的
    一次web请求发生的神奇故事
    Header解析
    Shiro入门指引
    Shiro入门资源整理
    Shiro在SpringBoot中的使用
    Shiro源码解析-Session篇
    Shiro源码解析-登录篇
    9.nginx使用redis用缓存
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13377412.html
Copyright © 2011-2022 走看看