• 二叉树的下一个结点


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

    分析

    • 如果一个节点有右子树,那么中序遍历的下一个节点就是它的右子树中的最左子节点
    • 如果一个节点没有右子树,且该节点是其父节点的左子节点,那么它的下一个节点就是它的父节点
    • 如果一个节点没有右子树,且它还是父节点的右子节点,那么我们可以沿着指向父节点的指针一直向上遍历,直到找到一个是它父节点的左子节点的节点,如果这样的节点存在,那么这个节点的父节点就是我们要找的下一个节点。

    节点类:

    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 node = null;
        	
        	if(pNode.right != null) {
        		TreeLinkNode nodeRight = pNode.right;
        		while(nodeRight.left != null) {
        			nodeRight = nodeRight.left;
        		}
        		
        		node = nodeRight;
        	}
        	else if(pNode.next != null) {
        		TreeLinkNode current = pNode;
        		TreeLinkNode parent = pNode.next;
        		
        		while(parent != null && current == parent.right) {
        			current = parent;
        			parent = parent.next;
        		}
        		
        		node = parent;
        	}
        	
        	return node;
        	
        }
    }
    
  • 相关阅读:
    .NET CORE中的配置系统
    .Net Core使用AspNetCoreRateLimit实现限流
    .NET CORE 依赖注入2
    linunx命令学习_文件命令
    .NET CORE 日志系统
    Rabbit MQ
    WPF学习
    Unity asp.net 依赖注入框架Unity
    .NET Core 依赖注入1
    备忘asp.net core使用中间件实现IP白名单访问
  • 原文地址:https://www.cnblogs.com/lishanlei/p/10707649.html
Copyright © 2020-2023  润新知