zoukankan      html  css  js  c++  java
  • 剑指Offer-二叉树的下一个结点

    题目描述

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

    思路

    分析二叉树的下一个节点,一共有以下情况:

    1. 二叉树为空,则返回空;
    2. 节点右孩子存在,则指针从该节点的右孩子出发,一直沿着指向左子结点的指针找到的叶子节点即为下一个节点;
    3. 节点不是根节点。如果该节点是其父节点的左孩子,则返回父节点;否则继续向上遍历其父节点的父节点,重复之前的判断,返回结果。

    中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。在二叉树中,先左后根再右。巧记:左根右。

    代码实现

    package Tree;
    
    /**
     * 二叉树的下一个结点
     * 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。
     * 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
     */
    public class Solution32 {
        public TreeLinkNode GetNext(TreeLinkNode pNode) {
            //二叉树为空
            if (pNode == null)
                return null;
            //若有右孩子,则找右孩子的最左节点
            if (pNode.right != null) {
                pNode = pNode.right;
                while (pNode.left != null) {
                    pNode = pNode.left;
                }
                return pNode;
            }
            //该节点不是根节点,若该节点是其父节点的左孩子,则返回父节点;否则继续向上遍历其父节点的父节点,重复之前的判断,返回结果。
            while (pNode.next != null) {
                if (pNode.next.left == pNode)
                    return pNode.next;
                pNode = pNode.next;
            }
            return null;
        }
    
        public class TreeLinkNode {
            int val;
            TreeLinkNode left = null;
            TreeLinkNode right = null;
            TreeLinkNode next = null;
    
            TreeLinkNode(int val) {
                this.val = val;
            }
        }
    }
    
    
  • 相关阅读:
    EBS_FORM_开发:关于离开record验证
    EBS_FORM_开发:关于WHEN-VALIDATE-ITEM上面commit
    EBS_FORM_开发:关于LOCK-ON
    EBS_FORM_开发:实现form record ctrl+F6复制
    EBS_FORM_开发:关于切换不同BLOCK的时候弹出需要保存的窗口
    EBS_FORM_开发:FRM-40150的解决思路
    工作记录
    02_mysql表的操作
    Mysql_字符集_排序规则
    JAVA_IO
  • 原文地址:https://www.cnblogs.com/wupeixuan/p/8678670.html
Copyright © 2011-2022 走看看