zoukankan      html  css  js  c++  java
  • 剑指offer--二叉树的下一个节点*

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

    /*
    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;
    	        }
    	      if(pNode.right!=null) { //有右子树
    	    	  TreeLinkNode tmp = pNode.right;
    	    	  while(tmp.left!=null) {
    	    		  tmp = tmp.left;
    	    	  }
    	    	  return tmp;
    	      }
    	    	while(pNode.next!=null) {
    	    		if(pNode.next.left==pNode) {//没有右子树;
    	    			
    	    			return pNode.next;
    	    		}
    	    		pNode = pNode.next;
    	    		
    	    	}
    	    	return null;
        }
    }
    

    参考

    链接:https://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e
    来源:牛客网
    
    public class Solution {
        TreeLinkNode GetNext(TreeLinkNode node)
        {
            if(node==null) return null;
            if(node.right!=null){    //如果有右子树,则找右子树的最左节点
                node = node.right;
                while(node.left!=null) node = node.left;
                return node;
            }
            while(node.next!=null){ //没右子树,则找第一个当前节点是父节点左孩子的节点
                if(node.next.left==node) return node.next;
                node = node.next;
            }
            return null;   //退到了根节点仍没找到,则返回null
        }
    }
    
    多思考,多尝试。
  • 相关阅读:
    前端发版后清理浏览器缓存处理
    CF235A 【LCM Challenge】
    CF39H 【Multiplication Table】
    CF171C 【A Piece of Cake】
    CF450A 【Jzzhu and Children】
    CF387B 【George and Round】
    火柴棒等式
    P1062 数列 题解
    P1045 麦森数
    (原创)最短路径那些事-1
  • 原文地址:https://www.cnblogs.com/LynnMin/p/9374521.html
Copyright © 2011-2022 走看看