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

    offer_57

    概要:二叉树的下一个结点

    题目描述

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

    思路:

    • 1、有右子树的,
      • 那么下个结点就是右子树最左边的点;(eg:D,B,E,A,C,G)
    • 2、没有右子树的,也可以分成两类,
    • a)是父节点左孩子(eg:N,I,L) ,那么父节点就是下一个节点 ;
    • b)是父节点的右孩子(eg:H,J,K,M)找他的父节点的父节点的父节点...直到当前结点是其父节点的左孩子位置。
    • 如果没有eg:M,那么他就是尾节点。

    图片


    参考

    https://www.cnblogs.com/littleswan/p/12420004.html

    代码实现:

    /*
    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){//如果当前结点的右子树不是空
    
                pNode = pNode.right;//当前结点往当前结点的右子树的结点走一个
                    while(pNode.left != null){//当前结点的左结点不空
                        pNode = pNode.left;//当前结点往当前结点的左子树的结点走一个
                    }
                  return pNode;//返回的下一个结点就是  当前结点
            
            }
            while(pNode.next != null){//当前结点的父节点不是空
                if(pNode.next.left == pNode)//如果  当前结点的  父节点的  左孩子   是 当前结点
                    return pNode.next;//返回的下一个结点就是当前结点的父节点
                pNode = pNode.next;//往后移
           
            }
            
            return null;//如果是尾结点,就返回null
            
        }
    }
    

    总结

    类似于实现一个中序遍历,明白递归和非递归的区别

  • 相关阅读:
    NgModelController: $setViewValue,$render,Formatter, Parser
    #!/usr/bin/env python与#!/usr/bin/python的区别
    post发送数据 mypost input 改变事件
    post发送 ArrayBuffer
    C# 字符串到字节数组,字节数组转整型
    C# WebKitBrowser 设置内容
    C# Tuple 创建一个新二元集合
    C# 时间对比
    C# 控件调整
    C# invoke和begininvoke的用法 __委托
  • 原文地址:https://www.cnblogs.com/SunAlbert/p/13496119.html
Copyright © 2011-2022 走看看