• 59.二叉树的下一个节点


    题目描述:

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

    思路分析:

      二叉树的下一个节点,一共有以下情况:

      1.二叉树为空,返回空

      2.节点的右孩子存在,则设置一个指针从右孩子出发,一直沿着左子节点的指针找到的叶子节点即为下一个节点。

      3.节点不是根节点,如果节点时父节点的左孩子,那么父节点就是下一个节点,否则继续向上遍历其父节点的父节点,重复之前的判断,返回结果。

    代码:

    /*
    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){    //pNode不为根节点
                TreeLinkNode parentNode=pNode.next;
                if(parentNode.left==pNode) //如果当前节点时父节点的左孩子,那么下一个节点就是父节点。
                    return parentNode;
                pNode=pNode.next;
            }
            return null;
        }
    }
    
  • 相关阅读:
    设计模式之观察者模式
    设计模式之外观模式
    设计模式之模板模式
    设计模式之装饰器模式
    设计模式之代理模式
    .NET常见问题汇总
    使用位运算计算两个整数的加减
    一个程序判断CPU是大端还是小端
    后缀表达式 转 表达式树
    实习一个月的小结
  • 原文地址:https://www.cnblogs.com/yjxyy/p/10961235.html
Copyright © 2020-2023  润新知