剑指Offer-二叉树的深度

布满荆棘的人生 2022-02-19 07:06 253阅读 0赞

题目描述

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

解题思路—使用堆栈使用堆栈依次压入路径,当路径达到叶结点时,计算堆栈长度,再弹出结点,计算另外路径的长度。最后比较得出长度最大值,即树的最大深度。
解题思路—递归:这段代码体现出了递归的精髓,特别简洁,但是不太易懂。从根结点一直递归到叶结点,从叶节点开始往上计算深度,每弹出一个子结点就深度+1,同时与兄弟子树深度相比,取最大值作为当前根结点的深度。注: 代码可以简洁到一行,如果不太理解,可以拆分下来,进行debug。推荐!
解题思路—层次遍历:层次遍历就是一层一层的压入树的结点,可以使用队列来存储。每次深度+1,就压入一层树结点,直至没有结点可以压入,则当前深度就是最大深度。

Java解题—使用堆栈

  1. import java.util.Stack;
  2. public class Solution {
  3. public int count = 0;
  4. public int TreeDepth(TreeNode root) {
  5. if(root==null)
  6. return 0;
  7. Stack<TreeNode> stack = new Stack<>();
  8. CalNode(stack, root);
  9. return count;
  10. }
  11. public void CalNode(Stack<TreeNode> stack, TreeNode root){
  12. if(root!=null) {
  13. stack.push(root);
  14. if(root.left==null && root.right==null){
  15. int num = stack.size();
  16. count = num > count ? num : count;;
  17. stack.pop();
  18. return;
  19. }
  20. if(root.left!=null) CalNode(stack, root.left);
  21. if(root.right!=null) CalNode(stack, root.right);
  22. stack.pop();
  23. }
  24. }
  25. }

Java解题—递归

  1. public class Solution {
  2. public int TreeDepth(TreeNode root) {
  3. if(root==null)
  4. return 0;
  5. return Math.max(TreeDepth(root.left), TreeDepth(root.right))+1;
  6. // 代码一行看不懂可以分接下来debug
  7. // int left = TreeDepth(root.left);
  8. // int right = TreeDepth(root.right);
  9. // int count = Math.max(left, right) + 1;
  10. // return count;
  11. }
  12. }

Java解题—层次遍历

  1. import java.util.Queue;
  2. import java.util.LinkedList;
  3. public class Solution {
  4. public int TreeDepth(TreeNode root) {
  5. if(root==null)
  6. return 0;
  7. Queue<TreeNode> queue = new LinkedList<TreeNode>();
  8. queue.add(root);
  9. int count = 0;
  10. while(!queue.isEmpty()){
  11. count++;
  12. // 将同一层的全部弹出
  13. int size = queue.size();
  14. for(int i=0;i<size;i++){
  15. TreeNode node = queue.poll();
  16. if(node.left!=null)
  17. queue.add(node.left);
  18. if(node.right!=null)
  19. queue.add(node.right);
  20. }
  21. }
  22. return count;
  23. }
  24. }

发表评论

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

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

相关阅读

    相关 offer 深度

    [剑指offer题型分类及各题的代码及解题思路][offer] 1、题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树...

    相关 Offer | 深度

    一、题目 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 二、思路 (1) 递归的思想适合

    相关 offer:深度

    题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 AC C++ Solution:

    相关 Offer-深度

    题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 解题思路—使用堆栈:使用堆栈依次压入