Talk is cheap.
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* Father *TreeNode
* }
*/
func inorderSuccessor(p *TreeNode) *TreeNode {
if p == nil {
return nil
}
if p.Right != nil {
p = p.Right
for p.Left != nil {
p = p.Left
}
return p
}
for p.Father != nil {
if p.Father.Left == p {
return p.Father
} else {
p = p.Father
}
}
return nil
}