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.
给出一个二叉树,找到它的最大深度。
PS:最大深度即从根节点到叶子节点的最长距离。
思路:以前做过,是层次遍历,用到的是STL中的queue,存储节点的指针及它目前的层数。从上向下遍历。
,struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; struct level { TreeNode* node; int degree; }; //定义Queue的结构类型 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; queue<level> que;//STL中Queue的用法 ,容器 level deepthptr; //声明一个level类型的结构体变量deepthptr deepthptr.degree=1; //此结点目前的深度 deepthptr.node=root; //指针node指向根结点 que.push(deepthptr); //STL中Queue的使用,deepthptr入队 int degree=1; //最大深度一开始为1 while(!que.empty()) //队列是否为空 { level ptr=que.front(); //第一个元素 que.pop(); //清除第一个元素 degree=ptr.degree; //此结点的深度赋值给最大深度 if(ptr.node->left!=NULL) //当某个结点的左右结点都为空是,即叶子结点,它的目前的深度就是最大深度 { level p; p.node=ptr.node->left; p.degree=ptr.degree+1; que.push(p); } if(ptr.node->right!=NULL) { level p; p.node=ptr.node->right; p.degree=ptr.degree+1; que.push(p); } } return degree; } }; 当然 还有更简单的算法
就是利用递归,代码很简单。
class Solution { public: int maxDepth(TreeNode *root) { if(!root) return 0; int leftchild = maxDepth(root->left); int rightchild = maxDepth(root->right); return (leftchild > rightchild) ? (leftchild + 1) : (rightchild + 1); } };
递归比较简单,但是想到不容易。
加油!
LeetCode----Maximum Depth of Binary Tree 求二叉树最大深度,布布扣,bubuko.com
LeetCode----Maximum Depth of Binary Tree 求二叉树最大深度
原文:http://feilei.blog.51cto.com/8675988/1370880