?104. Maximum Depth of Binary Tree(C++)

来源:互联网 发布:耳机线材淘宝 编辑:程序博客网 时间:2024/06/17 12:21

Given a binary tree, find its maximum depth.

The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

代码1:Depth-first-search(DFS)递归

class Solution {public:    int maxDepth(TreeNode* root) {        return root == NULL ? 0 : max(maxDepth(root -> left), maxDepth(root -> right)) + 1;    }};

代码2:Depth-first-search(DFS)非递归,用栈实现

// 为什么不对呢???class Solution {public:    int maxDepth(TreeNode* root) {    if (root == NULL)        return 0;    int res = 0;    stack<TreeNode*> s; // stack 模板类    s.push(root);    while (!s.empty()) {        ++ res;        for (int i = 0, n = s.size(); i < n; ++ i) {            TreeNode* p = s.top();            s.pop();            if (p -> left != NULL)                s.push(p -> left);            if (p -> right != NULL)                s.push(p -> right);        }    }    return res;    }};

代码3:Breadth-first-search(BFS)非递归用队列

class Solution {public:    int maxDepth(TreeNode* root) {    if (root == NULL)        return 0;    int res = 0;    queue<TreeNode*> q; // queue 模板类    q.push(root);    while (!q.empty()) {        ++ res;         // 问:q不是空的吗,只放进去了一个跟节点就知道了q的所有节点个数???        for (int i = 0, n = q.size(); i < n; ++ i) {            TreeNode* p = q.front();            q.pop();            if (p -> left != NULL)                q.push(p -> left);            if (p -> right != NULL)                q.push(p -> right);        }    }    return res;    }};

关于代码2、3的补充:
使用标准库的栈和队列时,先包含相关的头文件

#include<stack>#include<queue>// 定义栈如下:stack<int> s;// 定义队列如下:queue<int> q;

栈提供了如下的操作:

s.empty()               如果栈为空返回true,否则返回false  s.size()                返回栈中元素的个数  s.pop()                 删除栈顶元素但不返回其值  s.top()                 返回栈顶的元素,但不删除该元素  s.push()                在栈顶压入新元素  

队列提供了下面的操作:

q.empty()               如果队列为空返回true,否则返回false  q.size()                返回队列中元素的个数  q.pop()                 删除队列首元素但不返回其值  q.front()               返回队首元素的值,但不删除该元素  q.push()                在队尾压入新元素  q.back()                返回队列尾元素的值,但不删除该元素  
原创粉丝点击