【算法編程】求二叉樹的深度-Maximu Depth of Binary Tree

題目大意:

很簡單,只需要找出一顆二叉樹的最大深度即可,貌似沒有時間和空間的要求。

求解方法:

更簡單,只需要按照寬度優先的方法去查找即可,在這裏我用a隊列保存待擴展的節點,用b來保存a擴展出來的節點,再利用t中間變量來交換a和b,直到a列隊爲空時,結束。
注意邊界條件,root=NULL時,應該返回0.

#include <iostream>
#include <queue>
using namespace std;

//Definition for a binary tree node.
struct TreeNode {
   int val;
   TreeNode *left;
   TreeNode *right;
   TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
    int maxDepth(TreeNode* root) 
    {
        int deep=0;
        queue<TreeNode*> a;
        queue<TreeNode*> b;
        queue<TreeNode*> t;
        if (root!=NULL)
            deep=deep+1;
        else
            return deep;
        a.push(root);
        while(!a.empty())
        {
            //當兩個隊列至少一個不爲空時,
            //羅列a中的所有的子節點
            //將a的子節點放在b中,
            //交換a與b
            while(!a.empty())
            {
                TreeNode* node=a.front();
                if(node->left!=NULL)
                    b.push(node->left);
                if(node->right!=NULL)
                    b.push(node->right);
                a.pop();
            }
            t=a;
            a=b;
            b=t;
            if(!a.empty())
                deep=deep+1;
        }
        return deep;


    }
};
int main()
{
    cout << "只要將頭文件和solution類拷貝進去即可。!" << endl;
    //測試用例,比較麻煩,不寫,上述代碼去掉結構體定義可以AC
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章