二叉樹查找節點


前序中序后序的方式查詢指定的節點

前序查找思路
1.先判斷當前節點的no是否等於要查找的
2.如果是相等,則返回當前節點
3.如果不等,則判斷當前節點的左子節點是否為空,如果不為空,則遞歸前序查找
4.如果左遞歸前序查找,找到節點,則返回,否則繼續判斷,當前節點的右子節點是否為空,如果
不為空,則繼續向右遞歸前序查找

中序查找思路
1.判斷當前節點的左子節點是否為空,如果不為空,則遞歸中序查找
2.如果找到,則返回,如果沒有找到,就和當前節點比較,如果是則返回當前節點,否則繼續進行右
遞歸的中序查找
3.如果右遞歸中序查找,找到就返回,否則返回null

后序查找思路
1.判斷當前節點的左子節點是否為空,如果不為空,則遞歸后序查找
2.如果找到就返回,如果沒有找到就判斷當前節點的右子節點是否為空,如果不為空,則右遞歸進行
后序查找,如果找到就返回
3.和當前節點進行比較,如果是就返回,如果不是就返回null

代碼實現

HeroNode類中的三個方法

	//前序遍歷查找
    //如果找到就返回node,如果沒有找到就返回null
    public HeroNode preOrderSearch(int no){
        System.out.println("進入前序遍歷");
        if(this.no==no){
            return this;
        }
        //1.判斷當前節點的左子節點是否為空,如果不為空,則遞歸前序查找
        //2.如果左遞歸前需查找找到節點,就返回
        HeroNode resNode=null;
        if (this.left!=null){
            resNode=this.left.preOrderSearch(no);
        }
        if (resNode!=null){//說明左子樹找到
            return resNode;
        }
        //1.判斷當前節點的右子節點是否為空,如果不為空,則遞歸前序查找
        //2.如果右遞歸前需查找找到節點,就返回
        if (this.right!=null){
            resNode=this.right.preOrderSearch(no);
        }
        return resNode;

    }

    //中序遍歷查找
    public HeroNode infixOrderSearch(int no){
        //判斷當前節點的左子節點是否為空,如果不為空,則遞歸中序查找
        HeroNode resNode=null;
        if (this.left!=null){
            resNode=this.left.infixOrderSearch(no);
        }
        if (resNode!=null){
            return resNode;
        }
        System.out.println("進入中序遍歷查找");
        //如果左子樹沒有找到,就查找當前節點
        if (this.no==no){
            return this;
        }
        //否則繼續中序查找
        if (this.right!=null){
            resNode=this.right.infixOrderSearch(no);
        }
        return resNode;
    }

    //后序遍歷查找
    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;
        }
        System.out.println("進入后序遍歷查找");
        //如果左右子樹都沒有找到,就比較當前節點是不是
        if (this.no==no){
            return this;
        }
        return null;
    }
    
    
BinaryTree中的三個方法
	//前序遍歷查找
    public HeroNode preOrderSearch(int no){
        if (root!=null){
            return root.preOrderSearch(no);
        }else {
            return null;
        }
    }

    //中序遍歷查找
    public HeroNode infixOrderSearch(int no){
        if (root!=null){
            return root.infixOrderSearch(no);
        }else {
            return null;
        }
    }

    //后序遍歷查找
    public HeroNode postOrderSearch(int no){
        if (root!=null){
            return root.postOrderSearch(no);
        }else {
            return null;
        }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM