LeetCode: Maximum Depth of Binary Tree

桃扇骨 2022-08-06 09:13 107阅读 0赞

题目如下:

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.

即求二叉树的(最大)深度。

有两种思路:一是使用递归,二是使用二叉树层序遍历。

递归算法:用递归的函数,返回左子树或者右子树中大的深度加1,作为自己的深度。

  1. int maxDepth(TreeNode *root)
  2. {
  3. if (root == NULL) return 0;
  4. int left = maxDepth1(root->left);
  5. int right = maxDepth1(root->right);
  6. return left > right ? left + 1 : right + 1;
  7. }

二叉树的层序遍历使用队列将节点依次存储,每一个出列一个节点,当一层节点完全出列的时候,深度加1。

  1. int maxDepth(TreeNode *root)
  2. {
  3. if (root == NULL) return 0;
  4. queue<TreeNode *> btQueue;//使用队列进行层序遍历
  5. btQueue.push(root);
  6. int count = 1;//记录当前层的节点个数
  7. int depth = 0;//记录当前遍历的深度
  8. while (!btQueue.empty())
  9. {
  10. TreeNode *currentNode = btQueue.front();
  11. btQueue.pop();//每次循环出队一个节点
  12. count--;
  13. if (currentNode->left) btQueue.push(currentNode->left);
  14. if (currentNode->right) btQueue.push(currentNode->right);
  15. if (count == 0)
  16. {
  17. //每当遍历完上一次节点的时候,层数depth++,count修改为现在队列中的元素个数,即下层的节点个数
  18. depth++;
  19. count = btQueue.size();
  20. }
  21. }
  22. return depth;
  23. }

在Leetcode上进行提交,递归算法的运行时间为22ms,非递归的层序遍历算法为14ms,递归算法虽然代码简洁,思路清晰,但是在一定程度上消耗比较大。

发表评论

表情:
评论列表 (有 0 条评论,107人围观)

还没有评论,来说两句吧...

相关阅读