LeetCode-104:バイナリツリーの最大深さ

一つ、タイトル説明

ここに画像を挿入説明

第二に、問題解決のためのアイデア

  • 再帰検索
    • 現在のノードが空ノードである場合、その後も再帰関数の出口として、0を返します
    • それ以外の場合は、リターン1 + max(left, right)
  • 非再帰検索
    • バイナリツリートラバーサルシーケンスを適用した後:現在のノードを通過すると、スタック内のノードが現在のノードだけの親です。

第三に、問題解決のためのコード

  • 再帰
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(!root)   return 0;
        auto left = maxDepth(root->left);
        auto right = maxDepth(root->right);
        return 1 + max(left, right); 
    }
};
  • 非再帰
class Solution {
public:
    int maxDepth(TreeNode* root) {
    	int maxDep = 0;
        TreeNode *p = root, *r = nullptr;
        stack<TreeNode*> s;
        while(p || !s.empty()){
            if(p){
                s.push(p);
                p = p->left;
            }
            else{
                p = s.top();
                if(p->right && p->right != r)
                    p = p->right;
                else{
                    maxDep = (maxDep > s.size() ? maxDep : s.size());
                    s.pop();
                    r = p;
                    p = nullptr;
                }
            }
        }
        return maxDep;         
    }
};

第四に、業績

ここに画像を挿入説明

公開された30元の記事 ウォンの賞賛3 ビュー810

おすすめ

転載: blog.csdn.net/weixin_44587168/article/details/105376142