题目(leecode T104):
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
递归法:
递归法首先将根节点作为参数传入,随后每一轮传入当前节点的左右孩子节点,并且每一轮取左右树深度的最大值加一作为当前的高度。当节点为空时递归调用结束。
题解:
class Solution {
public:int getdepth(TreeNode* node) {if (node == NULL) return 0;int leftdepth = getdepth(node->left); // 左int rightdepth = getdepth(node->right); // 右int depth = 1 + max(leftdepth, rightdepth); // 中return depth;}int maxDepth(TreeNode* root) {return getdepth(root);}
};
迭代法:
本人更喜欢迭代法,本题求二叉树的深度。很适合用层序遍历的方法,每遍历一层,深度就加一。即在将下一层元素入队前将深度加一即可。
题解:
class Solution {
public:int maxDepth(TreeNode* node) {if(node == NULL) return 0;int depth = 0;queue<TreeNode*> que;que.push(node);while(!que.empty()){int size = que.size();depth++; //在此处深度加一for(int i = 0; i<size; i++){TreeNode* cur = que.front();que.pop();if(cur->left) que.push(cur->left);if(cur->right) que.push(cur->right);}}return depth;}
};