您的位置:首页 > Web前端

剑指offer--二叉树的下一个结点

2017-08-07 19:43 531 查看


题目描述

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

[java] view
plain copy

public static class TreeLinkNode {  

        int val;  

        TreeLinkNode left = null;  

        TreeLinkNode right = null;  

        TreeLinkNode next = nul
f673
l;  

  

        TreeLinkNode(int val) {  

            this.val = val;  

        }  

    }  

      

    TreeLinkNode GetNext(TreeLinkNode pNode){  

        if(pNode==null) return null;  

        if(pNode.next==null){//如果是根节点,查找右子树的最左节点(如果存在)        

            if(pNode.right==null) return null;  

            pNode = pNode.right;  

            while(pNode.left!=null) pNode=pNode.left;  

            return pNode;  

        }else if(pNode.next.left==pNode){//如果是父节点的左节点,当其右节点不存在时,返回父节点;否则返回右子树最左节点  

            if(pNode.right==null) return pNode.next;  

            pNode = pNode.right;  

            while(pNode.left!=null) pNode=pNode.left;  

            return pNode;  

        }else if(pNode.next.right==pNode){//如果是父节点的右节点,当其右节点存在,返回右节点;否则返回最非右父节点之父(如果过程循环到根节点,返回空)  

            if(pNode.right!=null) return pNode.right;         

            while(pNode.next!=null && pNode.next.right==pNode) pNode=pNode.next;  

            if(pNode.next==null) return null;             

            return pNode.next;  

        }  

        return null;  

    }  

原文链接http://blog.csdn.net/crazy__chen/article/details/45101775
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: