二叉树的深度优先搜索和广度优先搜索(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);
            }
        }
    }
}

复制代码的时候记得去除包名

猜你喜欢

转载自blog.csdn.net/double_sweet1/article/details/89297846