• 【剑指 Offer】08.二叉树的下一个节点


    题目描述

    给定一颗二叉树和其中的一个节点,找出中序遍历序列的下一个节点。树中的节点除了有两个分别指向左右节点的指针,还有一个指向父节点的指针。

    Java

    public class Solution08 {
        public static void main(String[] args) {
            
        }
    
        /**
         * 方法一:回溯,分情况讨论
         * 1. 当前节点有右子树,则下一个节点为右子树的最左子节点,如果无左子节点,则为右子节点本身;
         * 2. 当前节点没有右子树,如果父节点的左子节点就是当前节点,则下一个节点为父节点;
         * 3. 当前节点没有右子树,且父节点的左子节点不是当前节点,则应往上溯,
         * 直到存在一个向上遍历的过程中存在一个节点的父节点的左子节点正好是该节点自身,则这个父节点就是下一个节点。
         */
        public TreeLinKNode getNext(TreeLinKNode node) {
            if (node == null) {
                return null;
            }
    
            // 1.
            if (node.right != null) {
                node = node.right;
                while (node.left != null) {
                    node = node.left;
                }
                return node;
            }
    
            // 2. 返回一个父节点是它左子节点的节点
            while (node.parent != null) {
                if (node.parent.left == node) {
                    return node.parent;
                }
                node = node.parent; // 3. 回溯
            }
    
            return null;
        }
    }
    
    class TreeLinKNode {
        int val;
        TreeLinKNode left;
        TreeLinKNode right;
        TreeLinKNode parent;
    
        public TreeLinKNode(int val, TreeLinKNode left, TreeLinKNode right, TreeLinKNode parent) {
            this.val = val;
            this.left = left;
            this.right = right;
            this.parent = parent;
        }
    
        @Override
        public String toString() {
            return "TreeLinKNode [" + (left != null ? "left=" + left + ", " : "")
                    + (parent != null ? "parent=" + parent + ", " : "") + (right != null ? "right=" + right + ", " : "")
                    + "val=" + val + "]";
        }
    }
    

    C++

    
    

    Python

    
    

    总结

  • 相关阅读:
    Lambda表达式、依赖倒置
    ASP.NET vNext 概述
    Uname
    RHEL4 i386下安装rdesktop【原创】
    Taxonomy of class loader problems encountered when using Jakarta Commons Logging(转)
    How to decompile class file in Java and Eclipse
    先有的资源,能看的速度看,不能看的,抽时间看。说不定那天就真的打不开了(转)
    Google App Engine 学习和实践
    【VBA研究】VBA通过HTTP协议实现邮件轨迹跟踪查询
    js正則表達式语法
  • 原文地址:https://www.cnblogs.com/parzulpan/p/14221380.html
Copyright © 2020-2023  润新知