[LeetCode]104. Maximum Depth of Binary Tree--二叉树的最大深度
来源:互联网 发布:linux sed 举例 编辑:程序博客网 时间:2024/05/18 01:02
104. Maximum Depth of Binary Tree
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.
/* 解法一:深度优先遍历(Depth-first-search) * 简洁的递归解法,选择深度较大的子树的长度+1 * 即为整体二叉树的最大深度,依次递归调用即可 * * 时间复杂度:O(n);空间复杂度:O(lgn) * 解法一实现版本: * 1.递归实现 * 2.递归实现--一行代码(好玩而已) * 3.迭代实现--后序遍历 *//** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */// 1.递归实现class Solution {public: int maxDepth(TreeNode* root) { if(root == NULL) return 0; return max(maxDepth(root->left), maxDepth(root->right)) + 1; }};// 2.递归实现--一行代码class Solution {public: int maxDepth(TreeNode* root) { return root == NULL ? 0 : max(maxDepth(root->left), maxDepth(root->right)) + 1; }// 3.迭代实现--后序遍历class Solution {public: int maxDepth(TreeNode* root) { // 后序遍历存储结点的临时栈 其最大长度就是二叉树的最大深度 int result = 0; if(!root) return result; stack<TreeNode*> s; // pCur:当前访问节点,pLastVisit:上次访问节点 TreeNode* pCur = root; TreeNode* pLastVisit = NULL; // 走到最左端 while(pCur){ s.push(pCur); pCur = pCur->left; } while(!s.empty()){ result = max(result, int(s.size())); pCur = s.top(); s.pop(); // 一个根节点被访问的前提是:无右子树或右子树已被访问过 if(pCur->right == NULL || pCur->right == pLastVisit){ pLastVisit = pCur; }else{ // 根节点再次入栈 s.push(pCur); //进入右子树,且可肯定右子树一定不为空 pCur = pCur->right; while(pCur){ s.push(pCur); pCur = pCur->left; } } } return result; }};
/** 解法二:宽度优先遍历(Breadth-first-search) * 其实就是二叉树的层序遍历,有几层,最大深度就是多少 *//** * 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) { if(root == NULL) return 0; int result = 0; queue<TreeNode*> q; q.push(root); while(!q.empty()) { ++ result; 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 result; }};
阅读全文
0 0
- 【LeetCode】Maximum Depth of Binary Tree (二叉树最大深度)
- Leetcode Maximum Depth of Binary Tree 二叉树最大深度
- Leetcode 104.Maximum Depth of Binary Tree (二叉树的最大深度)
- [LeetCode]104. Maximum Depth of Binary Tree--二叉树的最大深度
- Leetcode#104. Maximum Depth of Binary Tree(最大二叉树的深度)
- Maximum Depth of Binary Tree 二叉树的最大深度
- Maximum Depth of Binary Tree 二叉树的最大深度
- Maximum Depth of Binary Tree 二叉树的最大深度
- Maximum Depth of Binary Tree 二叉树的最大深度
- maximum-depth-of-binary-tree(二叉树的最大深度)
- LeetCode OJ 之 Maximum Depth of Binary Tree (二叉树的最大深度)
- [leetcode]Maximum Depth of Binary Tree (求二叉树的最大深度 C语言)
- leetcode系列(28)Maximum Depth of Binary Tree 求二叉树的最大深度
- LeetCode 104 Maximum Depth of Binary Tree(二叉树的最大深度)
- [Java代码] [Leetcode] Maximum and Minimum Depth of Binary Tree 二叉树的最小最大深度
- 【LeetCode】 Maximum Depth of Binary Tree 二叉树的最大深度
- LeetCode-104 Maximum Depth of Binary Tree 二叉树的最大深度
- 【LeetCode】 Maximum Depth of Binary Tree 二叉树的最大深度
- 组件化架构漫谈
- 机器学习教程之13-决策树(decision tree)的sklearn实现
- 丑陋的字符串2
- Lucene&&Solr中的域(Filed)总结
- TabLayout、ViewPager和Fragment之间的通讯
- [LeetCode]104. Maximum Depth of Binary Tree--二叉树的最大深度
- 微信小程序之一本地图片处理--按屏幕尺寸插入图片
- ZigBee协议栈简介和流程
- Python package安装指南
- C++之通过符合塑模出has-a或“根据某物实现出”(38)---《Effective C++》
- OpenStack学习笔记-2
- ssm
- 网络学习笔记-以太网帧结构
- Jquery1.x,2.x,3.x之间各个版本的具体区别和特性