Advertisement
HXXXXJ

inorder Successor

Mar 24th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 0.90 KB | None | 0 0
  1. func inorderSuccessor(_ root: TreeNode?, _ p: TreeNode?) -> TreeNode? {
  2.         guard let root = root else {return nil}
  3.         guard let p = p else {return nil}
  4.        
  5.         var runner = root
  6.         var stack = [TreeNode]()
  7.  
  8.         stack.append(root)
  9.         while runner.left != nil{
  10.             stack.append(runner.left!)
  11.             runner = runner.left!
  12.         }
  13.        
  14.         while stack.count > 0{
  15.             let cur = stack.removeLast()
  16.             if cur.right != nil{
  17.                 stack.append(cur.right!)
  18.                 runner = cur.right!
  19.                 while runner.left != nil{
  20.                     stack.append(runner.left!)
  21.                     runner = runner.left!
  22.                 }
  23.             }  
  24.             //检查当前的如果就是P, 那么下一轮的那个node就是successor
  25.             if cur === p {
  26.                 return stack.removeLast()
  27.             }
  28.         }
  29.         return nil
  30.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement