二叉树 前驱结点

87 阅读1分钟

image.png

/**前驱结点*/
- (Node *)predecessorNode:(Node *)node{
    if (node == nil) {
        return  nil;
    }
    
    Node *pNode = node.left;
    //前驱结点在左子树里 (left.right.right.right......)
    if (pNode != nil) {
        while (pNode.right != nil) {
            pNode = pNode.right;
        }
        return pNode;
    }

    while (node.parent != nil && node == node.parent.left) {
        node = node.parent;
    }
    
    //node.parent == nil
    //node == node.parent.right
    
    return node.parent;
}