美文网首页
二叉树查找指定节点

二叉树查找指定节点

作者: 乙腾 | 来源:发表于2020-10-20 20:36 被阅读0次

树结构

image.png

code

BinarySortTreeNode

package com.pl.arithmetic.binarySortTree;

import com.pl.arithmetic.dto.HeroNode;

/**
 * <p>
 *
 * @Description: TODO
 * </p>
 * @ClassName BinarySortTreeNode
 * @Author pl
 * @Date 2020/10/13
 * @Version V1.0.0
 */
public class BinarySortTreeNode {
    private int value;
    private String name;
    BinarySortTreeNode leftNode;
    BinarySortTreeNode rightNode;

    public BinarySortTreeNode(int value, String name) {
        this.value = value;
        this.name = name;
    }


    public BinarySortTreeNode(int value) {
        this.value = value;
    }

    /**
     *前序排序
     * 
     * @param 
     * @return void
     * @exception 
     * @author silenter
     * @date 2020/10/13 7:04
    */
    public void preOrder(){
        System.out.println(this.value);
        if (this.leftNode!=null){
            this.leftNode.preOrder();
        }
        if (this.rightNode!=null){
            this.rightNode.preOrder();
        }
    }

    /**
     *中序排序
     * 
     * @param 
     * @return void
     * @exception 
     * @author silenter
     * @date 2020/10/13 7:04
    */
    public void infixOrder(){
        if (this.leftNode!=null){
            this.leftNode.infixOrder();
        }
        System.out.println(this.value);
        if (this.rightNode!=null){
            this.rightNode.infixOrder();
        }
    }

    /**
     *后续排序
     *
     * @param
     * @return void
     * @exception
     * @author silenter
     * @date 2020/10/13 7:05
    */
    public void postOrder(){
        if (this.leftNode!=null){
            this.leftNode.postOrder();
        }
        if (this.rightNode!=null){
            this.rightNode.postOrder();
        }
        System.out.println(this.value);
    }


    /**
     *前需查找
     *
     * @param no
     * @return com.pl.arithmetic.binarySortTree.BinarySortTreeNode
     * @exception
     * @author silenter
     * @date 2020/10/20 7:31
    */
    public BinarySortTreeNode preOrderSearch(int no) {
        System.out.println("进入遍历");
        BinarySortTreeNode binarySortTreeNode = null;
        if (no == this.value){
            return this;
        }
        if (this.leftNode!=null){
            binarySortTreeNode = this.leftNode.preOrderSearch(no);
        }
        if (binarySortTreeNode == null && this.rightNode!=null){
            binarySortTreeNode = this.rightNode.preOrderSearch(no);
        }
        return binarySortTreeNode;
    }

    /**
     *中序查找
     *
     * @param no
     * @return com.pl.arithmetic.dto.HeroNode
     * @exception
     * @author silenter
     * @date 2020/10/20 7:44
    */
    public BinarySortTreeNode infixOrderSearch(int no) {
        BinarySortTreeNode binarySortTreeNode = null;
        if (this.leftNode!=null){
            binarySortTreeNode = this.leftNode.infixOrderSearch(no);
        }
        if (binarySortTreeNode != null)
            return binarySortTreeNode;
        //注意放在当前节点上,真正比较查找比较,是在拿当前节点比较,比较了几次也就是查找了几次。
        System.out.println("进入遍历");
        if (this.value == no)
            return this;
        if (this.rightNode!=null)
            binarySortTreeNode = this.rightNode.infixOrderSearch(no);
        return binarySortTreeNode;
    }

    /**
     * 后续查找
     *
     * @param no
     * @return com.pl.arithmetic.binarySortTree.BinarySortTreeNode
     * @exception
     * @author silenter
     * @date 2020/10/20 7:50
    */
    public BinarySortTreeNode postOrderSearch(int no) {

        BinarySortTreeNode binarySortTreeNode = null;
        if (this.leftNode!=null){
            binarySortTreeNode = this.leftNode.infixOrderSearch(no);
        }
        if (binarySortTreeNode != null)
            return binarySortTreeNode;
        if (this.rightNode!=null)
            binarySortTreeNode = this.rightNode.infixOrderSearch(no);
        if (binarySortTreeNode != null)
            return binarySortTreeNode;
        System.out.println("进入遍历");
        if (this.value == no)
            return this;
        return binarySortTreeNode;
    }


    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public BinarySortTreeNode getLeftNode() {
        return leftNode;
    }

    public void setLeftNode(BinarySortTreeNode leftNode) {
        this.leftNode = leftNode;
    }

    public BinarySortTreeNode getRightNode() {
        return rightNode;
    }

    public void setRightNode(BinarySortTreeNode rightNode) {
        this.rightNode = rightNode;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

BinarySortTree

package com.pl.arithmetic.binarySortTree;

/**
 * <p>
 *
 * @Description: TODO
 * </p>
 * @ClassName BinarySortTree
 * @Author pl
 * @Date 2020/10/13
 * @Version V1.0.0
 */
public class BinarySortTree {
    private BinarySortTreeNode root;


    public void setRoot(BinarySortTreeNode root) {
        this.root = root;
    }

    public void preOrder(){
        if(verifyRootNode()){
            this.root.preOrder();
        }
    }

    public void infixOrder(){
        if(verifyRootNode()){
            this.root.preOrder();
        }
    }

    public void postOrder(){
        if(verifyRootNode()){
            this.root.preOrder();
        }
    }

    public BinarySortTreeNode preOrderSearch(int no) {
        return root.preOrderSearch(no);
    }

    public BinarySortTreeNode infixOrderSearch(int no) {
        return root.infixOrderSearch(no);
    }

    public BinarySortTreeNode postOrderSearch(int no) {
        return root.postOrderSearch(no);
    }


    public boolean verifyRootNode(){
        if (this.root!=null){
            return true;
        }
        System.out.println("root为空");
        return false;
    }
}

TestDemo

package com.pl.arithmetic.binarySortTree;

import com.pl.arithmetic.dto.HeroNode;

/**
 * <p>
 *
 * @Description: TODO
 * </p>
 * @ClassName TestDemo
 * @Author pl
 * @Date 2020/10/20
 * @Version V1.0.0
 */
public class TestDemo {
    public static void main(String[] args) {
        BinarySortTreeNode root = new BinarySortTreeNode(1, "tom");
        BinarySortTreeNode node2 = new BinarySortTreeNode(2, "jack");
        BinarySortTreeNode node3 = new BinarySortTreeNode(3, "smith");
        BinarySortTreeNode node4 = new BinarySortTreeNode(4, "mary");
        BinarySortTreeNode node5 = new BinarySortTreeNode(5, "king");

        //二叉树,后面我们要递归创建, 现在简单处理使用手动创建
        root.setLeftNode(node2);
        root.setRightNode(node3);
        node3.setRightNode(node4);
        node3.setLeftNode(node5);

        BinarySortTree binarySortTree = new BinarySortTree();
        binarySortTree.setRoot(root);

        //4次
        BinarySortTreeNode binarySortTreeNode = binarySortTree.preOrderSearch(5);
        System.out.println("中序查找!!!!!!!!!!!");
        //3
        BinarySortTreeNode binarySortTreeNode2 = binarySortTree.infixOrderSearch(5);
        System.out.println("后序查找!!!!!!!!!!");
        //2
        BinarySortTreeNode binarySortTreeNode3 = binarySortTree.postOrderSearch(5);


    }
}
image.png

notice

真正比较寻找的是这个代码块

 if (no == this.value){
            return this;
        }

当前节点上,真正比较查找比较,是在拿当前节点比较,比较了几次也就是查找了几次。

相关文章

  • 二叉查找树归纳-查找,插入,删除

    二叉查找树主要的操作包括查找指定元素,插入元素,删除指定元素,以及寻找最小节点,最大节点,查找指定元素的前驱或后继...

  • 二叉树查找指定节点

    树结构 code BinarySortTreeNode BinarySortTree TestDemo notic...

  • 二叉树 堆 2019-04-17

    二叉树 实现一个二叉查找树,并且支持插入、删除、查找操作 实现查找二叉查找树中某个节点的后继、前驱节点 实现二叉树...

  • 二叉树

    二叉树 只有一个根节点每个根节点至多有两个子节点 查找二叉树 满足二叉树全部定义当前节点的任意左子节点必须小于自身...

  • 算法面试题 - 二叉树 - 节点路径问题 - swift

    题目:在一个二叉树中(假定没有重复元素),查找指定元素,输出从根节点到该元素路径上的所有节点的值例子:假设有一个二...

  • 二叉树

    1.二叉树的遍历:前序、中序、后序遍历 2.二叉树查找节点和删除节点的代码

  • 二叉树与红黑树

    BST 二叉查找树就是一颗二叉树,他的左节点比父节点要小,右节点比父节点要大。他的高度决定的查找效率。 当查找BS...

  • 二叉树操作

    树节点 逐行顺序解析二叉树 前序遍历二叉树 中序遍历二叉树 后序遍历二叉树 删除指定数值的节点 前序遍历顺序存储的...

  • 513. Find Bottom Left Tree Value

    题目:查找二叉树的最底部的最左的节点的值

  • 2021-06-26二叉树

    分类 树、二叉树二叉查找树平衡二叉树、红黑树递归树 重点 计算公式 节点高度 = 节点到叶子节点的最长路径(边数)...

网友评论

      本文标题:二叉树查找指定节点

      本文链接:https://www.haomeiwen.com/subject/fchjmktx.html