java 求二叉树深度

本文介绍了如何使用Java计算二叉树的深度,包括通过递归算法比较左右子节点深度以及利用层次遍历的方法。重点在于理解在递归过程中,若节点存在则深度加1。同时提到了二叉树的层次遍历和先序遍历策略。

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

1)java 求二叉树深度

算法很简单,就是比较左子节点深度 右节点深度

还有一个核心内容就是如果有值就+1,+1这个是整个算法的核心。

2)二叉树的层次遍历,采用queue遍历,先左后右遍历

3)二叉树的先序遍历方法,先push进去,然后再pop出来,结果正好相反。


package javatest.suanfa.Erchashu;
import java.util.*;
public class dept {
 
 //二叉树的高度,后续遍历例子
 int height(TreeNode T)
 {
   if (T==null) {
    return 0;
   }
   int l=height(T.getLeftChild());
   int r=height(T.getRightChild());
   System.out.println("l==="+l+"---r=="+r+"------T==="+T.val);
   if (l>r) {
     return (l+1);
   }
   return (r+1);
 }
 
 /**
  * 二叉树的queue层次优先遍历
  * @param T
  */
 public void cengci(TreeNode T)
 {
   if (T==null) {
    return;
   }
   LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
   queue.offer(T);
   while(!queue.isEmpty()){
    TreeNode node = queue.poll();
    System.out.println("---queue--"+node.getVal());
    if(node.getLeftChild()!=null){
     queue.offer(node.getLeftChild());
    }
    if(node.getRightChild()!=null){
     queue.offer(node.getRightChild());
    }
    
   }
 }
 
 /**
  * 二叉树的先序遍历方法
  * @param T
  */
 public void stack(TreeNode T)
  {
    if (T==null) {
     return;
    }
    LinkedList<TreeNode> stack = new LinkedList<TreeNode>();
    stack.push(T);
    while(!stack.isEmpty()){
     TreeNode node = stack.pop();
     System.out.println("---stack--"+node.getVal());
     if(node.getRightChild()!=null){
      stack.push(node.getRightChild());
     }
     if(node.getLeftChild()!=null){
      stack.push(node.getLeftChild());
     }
     
    }
  }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  TreeNode node = new TreeNode(1);
  TreeNode node21 = new TreeNode(21);
  TreeNode node22 = new TreeNode(22);
  TreeNode node31 = new TreeNode(31);
  TreeNode node32 = new TreeNode(32);
  TreeNode node33 = new TreeNode(33);
  TreeNode node43 = new TreeNode(43);
  TreeNode node44 = new TreeNode(44);
  node.setLeftChild(node21);
  node.setRightChild(node22);
  node21.setLeftChild(node31);
  node21.setRightChild(node32);
  node22.setRightChild(node33);
  node33.setLeftChild(node43);
  node33.setRightChild(node44);
  dept dp = new dept();
  //求二叉树的高度
  System.out.println(dp.height(node));
  //深度遍历
  dp.cengci(node);
  dp.stack(node);
  
 }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值