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

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

    分析

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

    节点类:

    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;
        	
        }
    }
    
  • 相关阅读:
    以太坊客户端geth的基本操作命令
    以太坊虚拟机介绍5-比较操作指令
    以太坊虚拟机介绍4-按位运算指令
    浏览器内核
    javascript 几个易错点记录
    jq常用方法
    jq事件操作汇总
    js事件总汇
    margin 负边距 的知识点
    子div撑不开父div的几种解决办法:
  • 原文地址:https://www.cnblogs.com/lishanlei/p/10707649.html
Copyright © 2011-2022 走看看