LeetCode 285. Inorder Successor in BST
Posted 約束の空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 285. Inorder Successor in BST相关的知识,希望对你有一定的参考价值。
找中序遍历的后一个节点,那就中序遍历到当前节点后再往后一个,可以用递归,也可以非递归,完全没有用到BST的性质。
class Solution { public: TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) { stack<TreeNode *> s; TreeNode *cur=root; bool flag=false; while (!s.empty() || cur!=NULL){ while (cur){ s.push(cur); cur = cur->left; } cur = s.top(); s.pop(); if (flag) return cur; if (cur==p) flag=true; cur = cur->right; } return NULL; } };
也可以充分利用BST的性质,如果p比当前节点小,说明在左子树,res=root;否则去右子树搜索。
class Solution { public: TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) { TreeNode *res=NULL; while (root!=NULL){ if (p->val<root->val){ res = root; root = root->left; }else root = root->right; } return res; } };
以上是关于LeetCode 285. Inorder Successor in BST的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 285. Inorder Successor in BST
[LeetCode] 285. Inorder Successor in BST 二叉搜索树中的中序后继节点