如何判断一颗二叉树中的结点所在的深度

博客主要介绍了在二叉链表表示的二叉树中求结点深度的方法。设根节点深度为1,通过队列和标志位进行遍历,判断根节点是否为空,将根节点入队并设标志位,循环判断队列情况,根据出队结点是否为标志位进行相应操作,找到目标结点则输出其深度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何判断一颗二叉树中的结点所在的深度

(设根节点的深度为1)

在一棵二叉链表表示的二叉树中,求结点的深度。

设这样的一颗二叉树,深度为4,假设就D这个结点所在的深度
设这样的一颗二叉树,深度为4,假设就D这个结点所在的深度


  1. 首先判断他的根节点是否为空,若为空,则报空指针异常;

  2. 定义一个队列将他的根节点放入,随后加上一个标志位"#",表示这一行的结点已经遍历完毕,由于根节点已经进入队列,所以令level = 1;

  3. 随后进入循环,判断这个队列是否为空,如果队列为该标志位,则终止循环,如果队列不为空,则执行下列循环;

  4. 队列结点出队,如果说出队的结点为为该标志位并且队列不为空(如果队列为空,则表示他的遍历已经结束),则level + 1,并且把该标志位重新放入队列中,如果出队的结点不是该标志位,则判断他的左右孩子是否为空,若不为空,则把该结点的左右孩子放入队列中,如果遍历到的结点为想要求结点层数的结点,则直接跳出循环,输出该值。


代码实现如下:

	/**
     * 判断该结点所在的层数,利用层序遍历的方法
     *
     * @param node 树结点
     */
    public void level(T node) {
        if (null == root)
            throw new NullPointerException("x == null");
        ArrayDeque<BinaryNode<T>> que = new ArrayDeque<>();
        BinaryNode<T> p = null;
        BinaryNode<T> emp = new BinaryNode<T>((T)"#");
        que.offer(this.root);
        que.offer(emp);
        int level = 1;
        while (!que.isEmpty()) {
            p = que.pop();
            if(p.data.equals(emp.data)){
                if (que.isEmpty())
                    break;
                que.offer(emp);
                level++;
            }
            if(p.left != null )
                que.offer(p.left);
            if(p.right != null)
                que.offer(p.right);
            if (p.data.equals(node))
                break;
        }
        System.out.println(level);
    }

测试类如下:

	public static void main(String[] args) {
		// 声明一个数组,带空结点描述的二叉树的前序遍历
		String[] prelist_1 = {
				"A", 
				"B", 
				"D", 
				null, 
				"G", 
				null, 
				null, 
				null, 
				"C", 
				"E", 
				null, 
				null, 
				"F", 
				"H", 
				null, 
				null, 
				null
		};
		// 声明一个二叉树对象,将声明的数组传入进去
		BinaryTree<String> bitee_1 = new BinaryTree<> (prelist_1);
		System.out.print ("此树的结点的深度:");
		bitee_1.level("B");
	}

运行结果
此结点的深度

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值