プログラマーインタビューゴールデンクラシック-インタビューの質問04.06。後継者

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;
    }
};

4つの問題解決の結果

おすすめ

転載: blog.csdn.net/qq_39661206/article/details/108056899