树的三种查找方式

7.3.1 前序查找

  1. 先判断当前节点的no是否等于要查找的
  2. 如果是相等,则返回当前节点
  3. 如果不等,则判断当前节点的左子节点是否为空,如果不为空,则递归前序查找
  4. 如果做地柜前序查找,找到节点,则返回,否继续判断,当前的节点的有自己额点是否为空,如果不空,则继续向右递归前序查找
// 前序查找
public HeroNode preOrderSearch(int no) {
    if (this.no == no) return this;   //找到了
    // 如果不等,则判断当前节点的左子节点是否为空,如果不为空,则递归前序查找
    HeroNode resNode = null;
    if (this.left != null) resNode = this.left.preOrderSearch(no);
    if (resNode != null) return resNode;      //说明找到了
    if (this.right != null) resNode = this.right.preOrderSearch(no);
    return resNode;   //遍历完毕情况已经找不到返回空或者是
}

7.3.2 中序查找

  1. 判断当前节点的子节点是否为空,如果不为空,则递归中序查找
  2. 如果找到,则返回,如果没找到,就和当前节点对比,如果是则返回当前节点,否则继续右递归中序查找
  3. 如果油底柜中序查找,找到这返回,否则返回null
//中序查找
public HeroNode infixOrderSearch(int no) {
  //判断当前结点的左子节点是否为空,如果不为空,则递归中序查找
  HeroNode resNode = null;
  if(this.left != null) resNode = this.left.infixOrderSearch(no);
  if(resNode != null) return resNode;//如果找到,则返回,如果没有找到,就和当前结点比较,如果是则返回当前结点
  if(this.no == no) return this;//否则继续进行右递归的中序查找
  if(this.right != null) resNode = this.right.infixOrderSearch(no);
  return resNode;
}

7.3.3 后续查找

  1. 判断当前节点左子节点是否为空如果不为空,则递归后续查找
  2. 如果找到,则返回,如果没有找到,就判断当前节点的右子节点是否为空,如果不为空,则向右递归进行后续查找,如果找到,则返回
  3. 就和当前节点进行,比如,如果是则返回,否则返回Null
//后续查找
public HeroNode postOrderSearch(int no) {
  HeroNode resNode = null;
  if (this.left != null) resNode = this.left.postOrderSearch(no);
  if (resNode != null) return resNode;
  if (this.right != null) resNode = this.right.postOrderSearch(no);
  if (resNode != null) return resNode;
  if (this.no == no) return this;    // 如果左右子树都没找到,则比较自身
  return resNode;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值