二叉樹的深度優先搜索和廣度優先搜索(java實現)

package suanfaTest.TreeNode;

public class TreeNode {
    int data;
    //左子樹
    TreeNode leftNode;
    //右子樹
    TreeNode rightNode;

    public TreeNode() {
    }

    public TreeNode(int data) {
        this.data = data;
    }

    public TreeNode(int data, TreeNode leftNode, TreeNode rightNode) {
        this.data = data;
        this.leftNode = leftNode;
        this.rightNode = rightNode;
    }
}
package suanfaTest.TreeNode;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

public class ShenduAndGuangduBianli {
    public static void main(String args[]){
        TreeNode head = new TreeNode(1);
        TreeNode second = new TreeNode(2);
        TreeNode three = new TreeNode(3);
        TreeNode four = new TreeNode(4);
        TreeNode five = new TreeNode(5);
        TreeNode six = new TreeNode(6);
        TreeNode seven = new TreeNode(7);
        head.rightNode = three;
        head.leftNode = second;
        second.rightNode = five;
        second.leftNode = four;
        three.rightNode = seven;
        three.leftNode =  six;
        ShenduAndGuangduBianli sb = new ShenduAndGuangduBianli();
        System.out.println("廣度優先遍歷結果: ");
        sb.GuangduFirst(head);
        System.out.println("深度優先遍歷結果: ");
        sb.ShengduFirst(head);
    }

    //廣度優先遍歷,使用的是隊列
    public void GuangduFirst(TreeNode nodeHead){
        if (nodeHead == null){
            return;
        }
        Queue<TreeNode> myQueue = new LinkedList<TreeNode>();
        ((LinkedList<TreeNode>) myQueue).add(nodeHead);
        while (!myQueue.isEmpty()){
            //當隊列不爲空時,先彈出隊列中的一個元素,然後將左孩子和右孩子添加進隊列
            TreeNode node = myQueue.poll();//node爲彈出的那個元素
            System.out.print(node.data+ " ");
            if (null!=node.leftNode){
                ((LinkedList<TreeNode>) myQueue).add(node.leftNode);
            }
            if (null!=node.rightNode){
                ((LinkedList<TreeNode>) myQueue).add(node.rightNode);
            }
        }
        System.out.println();
    }
    //深度優先遍歷
    public void ShengduFirst(TreeNode nodeHead){
        if (nodeHead == null){
            return;
        }
        Stack<TreeNode> myStack = new Stack<TreeNode>();
        myStack.add(nodeHead);
        while (!myStack.isEmpty()){
            TreeNode node = myStack.pop();//彈出棧頂元素
            System.out.print(node.data+" ");//輸出的是node對應的元素值
            if (null != node.rightNode){
                myStack.push(node.rightNode);
            }
            if (null != node.leftNode){
                myStack.push(node.leftNode);
            }
        }
    }
}

複製代碼的時候記得去除包名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章