二叉树的下一个结点

59 阅读1分钟

二叉树的下一个结点

//思路:
//1、如果一个节点的右子树不为空,那么该节点的下一个节点是右子树的最左节点;
//否则,向上找第一个左链接指向的树包含该节点的祖先节点。
public TreeLinkNode GetNext(TreeLinkNode pNode){
    if(pNode==null){
        return null;
    }
    if(pNode.right!=null){
        //先判断 pNode 的右子树不为 null,
        //pNode 的下一个结点就是 pNode 右子树的最左结点
        TreeLinkNode node = pNode.right; //pNode 的右子树
        while(node.left!=null){
            node = node.left;
        }
        return node;
    }else{   //否则,向上找第一个左连接指向的树包含该节点的祖先节点
        while (pNode.next!=null){
            TreeLinkNode parent = pNode.next;
            if(parent.left==pNode){
                return parent;
            }
            pNode = pNode.next;
        }
    }
    return null;
}

www.mianshi.onlinewww.i9code.cn

本文由博客一文多发平台 OpenWrite 发布!