• 剑指Offer_57_二叉树的下一个结点


    题目描述

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

    解题思路

    我们知道二叉树的中序遍历是先遍历左子树,然后遍历根结点,最后遍历右子树。根据题意,我们需要找到当前节点的下一个需要遍历的结点,首先判断该结点是否存在右子树,如果存在,那么下一个结点一定在其右子树中,且是右子树中第一个没有左孩子的结点(每一个有左孩子的结点,就需要遍历其左子树)。如果结点没有右子树,那么如果该结点是父结点的左孩子,那么下一个结点就是其父结点;如果当前结点是父结点的右孩子,那么继续往上找到父结点的父结点,直到找到一个结点是父结点的左孩子的结点,那么其父结点就是下一个结点,如果一直遍历到根结点也没有找到存在结点是父结点的左孩子的结点,那么当前给定结点是二叉树中序遍历的最后的结点,下一个结点就是null。

    实现

    /*树结点定义*/
    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;
            TreeLinkNode p;
            if (pNode.right != null){
                p = pNode.right;
    			//找到第一个没有左结点的结点
                while (p != null && p.left != null){
                    p = p.left;
                }
                return p;
            }
    
            p = pNode.next;  //指向父结点
    
            while (p != null){
                if (pNode == p.left) return p;  //当前结点是父结点的左孩子
    			//往上找
                pNode = p;
                p = p.next;
            }
    
            return p;
        }
    }
    
  • 相关阅读:
    aes加密
    获取当前系统的版本号
    解决eclipse中出现Resource is out of sync with the file system问题
    Mac系统打开命令行终端及查看操作系统版本号的方法
    android短信拦截
    android权限大全
    mac系统下的常用命令
    android 中 系统日期时间的获取
    ubuntu tor浏览器
    Python中的random模块
  • 原文地址:https://www.cnblogs.com/ggmfengyangdi/p/5814451.html
Copyright © 2020-2023  润新知