二叉树的深度(递归和非递归)

一共两种实现方法,
第一种使用递归进行遍历,取左右子树最大的深度加一。

第二种实现方式,使用队列进行广度优先遍历。每遍历一层给深度加一


// 树的节点
public class TreeNode {
    int mValue;
    TreeNode mLeftNode;
    TreeNode mRightNode;
    public TreeNode(int val) {
        mValue = val;
    }
}
import java.util.LinkedList;
import java.util.Queue;

public class 二叉树的深度 {
// 使用递归进行遍历
    private static int treeDepthRecursion(TreeNode root) {
        if (root == null) {
            return 0; //当没有子节点的时候返回0
        }
        int leftValue = treeDepthRecursion(root.mLeftNode);
        int rightValue = treeDepthRecursion(root.mRightNode);
        // 取左右子树的最大深度,然后加1
        return Math.max(leftValue, rightValue) + 1;
    }

// 非递归进行遍历
   // offer add,remove poll,element peek的区别  [https://www.cnblogs.com/chengdabelief/p/6883238.html](https://www.cnblogs.com/chengdabelief/p/6883238.html)
    private static int treeDepthNoRecurssion(TreeNode root) {
        if (root == null) {
            return 0;
        }
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root); // 往队列中添加元素
        int depth = 0;
        while (queue.size() != 0) {
            int len = queue.size();
            depth++;
            // 使用层次遍历的方法,遍历每一层的节点
            while (len != 0) {
                TreeNode node = queue.poll(); // 返回第一个元素并在队列中删除
                if (node.mLeftNode != null) queue.offer(node.mLeftNode);
                if (node.mRightNode != null) queue.offer(node.mRightNode);
                len--;
            }
        }
        return depth;
    }

    public static void main(String[] args) {
        TreeNode root = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node5 = new TreeNode(5);
        TreeNode node6 = new TreeNode(6);
        TreeNode node7 = new TreeNode(7);
        root.mLeftNode = node2;
        root.mRightNode = node3;
        node2.mLeftNode = node4;
        node2.mRightNode = node5;
        node3.mRightNode = node6;
        node5.mLeftNode = node7;
        System.out.println(treeDepthRecursion(root));
        System.out.println(treeDepthNoRecurssion(root));
    }
}```

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值