二叉树的最大深度算法面试题-leetcode学习之旅(3)
来源:互联网 发布:书籍收纳 知乎 编辑:程序博客网 时间:2024/05/03 12:47
标题
Maximum Depth of Binary Tree
描述
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
c++实现方法代码
1.递归实现,时间复杂度为O(n) 空间复杂度为O(logn)
/** * Definition for binary tree * 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 left = maxDepth(root->left); int right = maxDepth(root->right); return 1 + max(left,right); }};
2.队列实现
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: //二叉树最大深度(层次遍历,遍历一层高度加1) int maxDepth(TreeNode *root) { int height = 0,rowCount = 1; if(root == NULL){ return 0; } //创建队列 queue<treenode*> queue; //添加根节点 queue.push(root); //层次遍历 while(!queue.empty()){ //队列头元素 TreeNode *node = queue.front(); //出队列 queue.pop(); //一层的元素个数减1,一层遍历完高度加1 rowCount --; if(node->left){ queue.push(node->left); } if(node->right){ queue.push(node->right); } //一层遍历完 if(rowCount == 0){ //高度加1 height++; //下一层元素个数 rowCount = queue.size(); } } return height; }};</treenode*>
3.栈
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int maxDepth(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function if(root == NULL) return 0; stack<treenode*> S; int maxDepth = 0; TreeNode *prev = NULL; S.push(root); while (!S.empty()) { TreeNode *curr = S.top(); if (prev == NULL || prev->left == curr || prev->right == curr) { if (curr->left) S.push(curr->left); else if (curr->right) S.push(curr->right); } else if (curr->left == prev) { if (curr->right) S.push(curr->right); } else { S.pop(); } prev = curr; if (S.size() > maxDepth) maxDepth = S.size(); } return maxDepth; } };</treenode*>
4.测试
**********************************/#include <iostream>#include <malloc.h>#include <stdio.h>using namespace std;typedef struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}}TreeNode,*BiTree;//按先序序列创建二叉树int CreateBiTree(BiTree &T){ int data; //按先序次序输入二叉树中结点的值,‘-1’表示空树 scanf("%d",&data); if(data == -1){ T = NULL; } else{ T = (BiTree)malloc(sizeof(TreeNode)); //生成根结点 T->val = data; //构造左子树 CreateBiTree(T->left); //构造右子树 CreateBiTree(T->right); } return 0;}//二叉树最大深度(递归)int maxDepth(TreeNode *root) { if(root == NULL){ return 0; } int left = maxDepth(root->left); int right = maxDepth(root->right); return 1 + max(left,right);}int main() { int i,n; BiTree T = NULL; CreateBiTree(T); printf("%d\n",maxDepth(T)); return 0;}</stdio.h></malloc.h></iostream>
0 0
- 二叉树的最大深度算法面试题-leetcode学习之旅(3)
- 算法之乐:一个算法解决3道经典二叉树面试题(深度、长度、直径)
- 算法面试题-leetcode学习之旅(一)
- 算法面试题-leetcode学习之旅(二)
- 【剑指Offer学习】【面试题39:二叉树的深度】
- 面试题之求二叉树的深度
- 剑指offer面试题之求二叉树的深度
- 面试题28:二叉树的深度
- 面试题39:二叉树的深度
- 面试题 求二叉树的深度
- 面试题39:二叉树的深度
- 面试题43:二叉树的深度*
- 面试题39:二叉树的深度
- 面试题39:二叉树的深度
- 面试题39:二叉树的深度
- 面试题39:二叉树的深度
- 面试题39. 二叉树的深度
- 面试题39:二叉树的深度
- Python: scikit-image 图像的基本操作
- 基础排序算法Java版本(上)
- 【转载】CSS常用英文字体介绍
- SPFA
- 数组NSArray和可变数组NSMutableArray的基础知识
- 二叉树的最大深度算法面试题-leetcode学习之旅(3)
- 数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)
- NSComparisonResult和NSComparator
- 官方推荐:精简google-play-services.jar的方法(解决65536问题的应急方案)
- 初始化JTable 各列的宽度
- nyoj 心急的C小加 236 (贪心&&LIS)
- android开发步步为营之82:android多语言国际化
- hdu5366
- ListView添加分段头信息