深度优先和广度优先算法测试

直接上代码:

package org.meter.demo.sort;

import lombok.extern.log4j.Log4j2;

import java.util.ArrayDeque;

/**

* 广度优先和深度优先算法模拟

* 广度优先采用队列

* 深度优先采用栈

*/

@Log4j2

public class DeepWidthSearch {

static class TreeNode {

int value;

        TreeNodeleft;

        TreeNoderight;

        public TreeNode(int value) {

this.value = value;

        }

}

TreeNoderoot;

    public DeepWidthSearch(int[] array) {

root =makeBinaryTreeByArray(array, 1);

    }

/**

    * 采用递归的方式创建一颗二叉树

    * 传入的是二叉树的数组表示法

    * 构造后是二叉树的二叉链表表示法

    */

    public static TreeNodemakeBinaryTreeByArray(int[] array, int index) {

if (index < array.length) {

int value = array[index];

            if (value !=0) {

TreeNode t =new TreeNode(value);

                array[index] =0;

                t.left =makeBinaryTreeByArray(array, index *2);

                t.right =makeBinaryTreeByArray(array, index *2 +1);

                return t;

            }

}

return null;

    }

/**

    * 深度优先遍历,相当于先根遍历

    * 采用非递归实现

    * 需要辅助数据结构:栈

    */

    public void depthDegreeSrarch() {

if (root ==null) {

logger.info("empty tree");

return;

        }

ArrayDeque stack =new ArrayDeque();

        stack.push(root);

        while (stack.isEmpty() ==false) {

TreeNode node = stack.pop();

            logger.info("深度优先遍历:"+node.value +"    ");

            if (node.right !=null) {

stack.push(node.right);

            }

if (node.left !=null) {

stack.push(node.left);

            }

}

logger.info("-------------------------------------------------------------");

    }

/**

    * 广度优先遍历

    * 采用非递归实现

    * 需要辅助数据结构:队列

    */

    public void widthDegreeSearch() {

if (root ==null) {

logger.info("empty tree");

return;

        }

ArrayDeque queue =new ArrayDeque();

        queue.add(root);

        while (queue.isEmpty() ==false) {

TreeNode node = queue.remove();

          logger.info("广度优先:"+node.value +"    ");

            if (node.left !=null) {

queue.add(node.left);

            }

if (node.right !=null) {

queue.add(node.right);

            }

}

logger.info("------------------------------------------------");

    }

    public static void main(String[] args) {

int[] arr = {0, 13, 65, 5, 97, 25, 0, 37, 22, 0, 4, 28, 0, 0, 32, 0};

        DeepWidthSearch tree =new DeepWidthSearch(arr);

        tree.depthDegreeSrarch();

        tree.widthDegreeSearch();

    }

}

测试数据以及测试结果:


测试数据
测试结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 1. 栈和队列1.用两个队列实现栈2.用两个栈实现队列3.实现一个栈,可以用常数级时间找出栈中的最小值4.判...
    MigrationUK阅读 3,058评论 4 20
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,291评论 0 16
  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 2,214评论 0 3
  • 时隔三年,又来到了这个有父母大舒在的城市——广州。 今天出门之前,乌云早已排成一排,可能...
    似水流年__阅读 190评论 0 0
  • 【365极致成长营】第三十一天身边人的评价,是最好的标准1. 大家应该看到了我们自己课程第一阶段的招生简章。要说的...
    陈陈陈皮阅读 181评论 0 0