题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
提交链接:点击
思路:
递归版:
1.如果只有根节点,那么深度为1
2.如果根节点只有右子树或者左子树,那么深度为右子树或左子树深度+1,即加上根节点
3.如果根节点有右子树和左子树,那么深度为右子树和左子树深度最大值+1
非递归版:
层次遍历,用队列。每遍历一层,count加1;
每一层,使用一个len变量记录该层的结点数,也就是队列的当前长度,从队列里面依次出队列len长度,再将下一层节点加入队列。
代码:
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: int TreeDepth(TreeNode* pRoot) { //1.如果只有根节点,那么深度为1 //2.如果根节点只有右子树或者左子树,那么深度为右子树或左子树深度+1,即加上根节点 //3.如果根节点有右子树和左子树,那么深度为右子树和左子树深度最大值+1 if(!pRoot) return 0; if(!pRoot->left && !pRoot->right) return 1; else if(pRoot->left && !pRoot->right) return TreeDepth(pRoot->left)+1; else if(!pRoot->left && pRoot->right) return TreeDepth(pRoot->right)+1; else return max(TreeDepth(pRoot->left),TreeDepth(pRoot->right))+1; } };
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: int TreeDepth(TreeNode* pRoot) { //层次遍历,用队列存储。每遍历完一层count加1 if(!pRoot) return 0; queue<TreeNode *> result; result.push(pRoot); int count=0; while(!result.empty()){ int len=result.size(); count++; while(len--){ TreeNode *temp = result.front(); result.pop(); if(temp->left) result.push(temp->left); if(temp->right) result.push(temp->right); } } return count; } };