题解 | #二叉树的下一个结点#

二叉树的下一个结点

http://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e

思路是:分两大类节点:有右节点和无右节点 有右节点:直接找右节点的最高(最底层)且最左的节点,就是该节点。 没有右节点:先判断是否是根节点,是根节点则返回null(因为没有右节点了),不是根节点判断是左节点还是右节点。是左节点:直接返回父节点(因为没有右节点),是右节点返回拐角处节点的父节点(用两个指针判断拐角点)。

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.right != null){
            TreeLinkNode tmp = pNode.right;
            
            while(tmp.left != null){
                tmp = tmp.left;
            }
            return tmp;
        }
        //不存在右节点
        else{
            //根节点
            if(pNode.next == null){
                return null;
            }else{//不是根节点
                if(pNode.next.left == pNode){
                    return pNode.next;
                }else{
                    //右节点关键代码(用两个指针判断拐弯)
                    TreeLinkNode tmp = pNode;
                    TreeLinkNode root = pNode;
                    while(root.next != null){
                        root = tmp.next;
                        if(root.left == tmp){
                            return root;
                        }
                        tmp = root;
                    }
                }
            }
        }
        return null;
    }
}
全部评论

相关推荐

今天 16:33
已编辑
微软_sde(实习员工)
点赞 评论 收藏
分享
09-19 12:15
门头沟学院 Java
迷茫的大四🐶:这下是真的打牌了,我可以用感谢信和佬一起打牌吗
点赞 评论 收藏
分享
牛客吹哨人:哨哥晚点统一更新到黑名单:能救一个是一个!26届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1525833
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务