1.トピックの紹介
バイナリ検索ツリーで、指定されたノードの「次の」ノード(つまり、順序どおりの後続ノード)を見つけるアルゴリズムを設計します。
指定されたノードに対応する「次の」ノードがない場合、nullが返されます。
例1:
入力:ルート= [2,1,3]、p = 1
2
/ \
1 3
出力:2
例2:
入力:root = [5,3,6,2,4、null、null、1]、p = 6
5
/ \
3 6
/ \
2~4
/
1
出力:null
出典:LeetCode
リンク:https ://leetcode-cn.com/problems/successor-lcci
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
2つの問題解決のアイデア
この質問では、バイナリツリーの中次トラバーサルを調べ、中次トラバーサルで指定されたノードの次のノードを見つけます。
3つの問題解決コード
class Solution {
public:
//二叉树的中序遍历
TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
stack<TreeNode*> st;
TreeNode* preNode = NULL;
while(!st.empty() || root)
{
while(root)
{
st.push(root);
root = root->left;
}
root = st.top();
st.pop();
if(p == preNode)
return root;
preNode = root;
root = root->right;
}
return NULL;
}
};