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;
        }
    }
    
  • 相关阅读:
    Boxes and Candies(贪心)
    Gone Fishing(贪心)
    Gaby Ivanushka(快排)
    Stacks of Flapjacks(栈)
    Robbery(记忆化搜索)
    PILE读书笔记_基础知识
    2. Add Two Numbers【medium】
    160. Intersection of Two Linked Lists【easy】
    92. Reverse Linked List II【Medium】
    206. Reverse Linked List【easy】
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13377412.html
Copyright © 2011-2022 走看看