二叉树的最大深度

来源:互联网 发布:java微信开发教程 pdf 编辑:程序博客网 时间:2024/06/06 11:16

问题描述:

给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的距离。

递归解法:

class Solution {public:    /**     * @param root: The root of binary tree.     * @return: An integer     */    int maxDepth(TreeNode *root) {        if (NULL == root) {            return 0;        }        int left_depth = maxDepth(root->left);        int right_depth = maxDepth(root->right);        return max(left_depth, right_depth) + 1;    }};

非递归(深度优先):

class Solution {public:    /**     * @param root: The root of binary tree.     * @return: An integer     */    int maxDepth(TreeNode *root) {        // write your code here        if (root==NULL){            return 0;        }        stack<TreeNode*> s;        bool flag[10000];        int max = 0, i = 0;        while (!s.empty()||root) {            if (root) {                s.push(root);                flag[i++] = 0;                root=root->left;            } else if(flag[i-1]==0) {                root = s.top()->right;                flag[i-1] = 1;            } else {                if (max<i){                    max = i;                }                s.pop();                i--;            }        }        return max;    }};

非递归(广度优先):

class Solution {public:    /**     * @param root: The root of binary tree.     * @return: An integer     */    int maxDepth(TreeNode *root) {        // write your code here        if (root==NULL){            return 0;        }        queue<TreeNode*> q;        q.push(root);        int max = 0;        while (!q.empty()) {            int size = q.size();            for (int i=0;i<size;i++){                root = q.front();                q.pop();                if(root->left){                    q.push(root->left);                }                if (root->right){                    q.push(root->right);                }            }            max++;        }        return max;    }};
原创粉丝点击