《剑指offer》二叉树的下一个节点

来源:互联网 发布:在淘宝上买衣服还赚吗 编辑:程序博客网 时间:2024/06/11 23:55

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

解析:主要分两大类。一类:该节点有右子树,则找到右子树的最左边的节点返回;二类是该孩子没有右子树,又可以分为两类。1.该节点就是左孩子了,直接找到它的父节点;2.不是左孩子,继续向上遍历其父节点的父节点,重复之前的判断,返回结果

/*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;    }}
原创粉丝点击