1. 程式人生 > 其它 >二叉樹的深度優先和廣度優先遍歷

二叉樹的深度優先和廣度優先遍歷

package com.springboot.study.tests.trees;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Author: guodong
 * @Date: 2021/12/24 17:03
 * @Version: 1.0
 * @Description:
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TreeNode {

    public int val;

    
public TreeNode left; public TreeNode right; }
package com.springboot.study.tests.trees;

import java.util.*;

/**
 * @Author: guodong
 * @Date: 2021/12/24 17:05
 * @Version: 1.0
 * @Description:
 */
public class binaryTree {

    public static void main(String[] args) {
        List<Integer> list=new
ArrayList<Integer>(); //構造二叉樹 TreeNode treeNode6=new TreeNode(2,null,null); TreeNode treeNode5=new TreeNode(1,null,null); TreeNode treeNode4=new TreeNode(7,null,null); TreeNode treeNode3=new TreeNode(6,treeNode5,treeNode6); TreeNode treeNode2=new TreeNode(5,treeNode4,null
); TreeNode root=new TreeNode(3,treeNode2,treeNode3); list=DFS(root); System.out.println("深度優先遍歷:"+list); list=BFS(root); System.out.println("廣度優先遍歷:"+list); } /** * 深度優先遍歷 * @param root * @return */ public static List<Integer> DFS(TreeNode root){ Stack<TreeNode> stack=new Stack<TreeNode>(); List<Integer> list=new ArrayList<Integer>(); if(root==null) return list; stack.push(root); while (!stack.isEmpty()){ TreeNode t=stack.pop(); if(t.right!=null){ stack.push(t.right); } if(t.left!=null){ stack.push(t.left); } list.add(t.val); } return list; } /** * 廣度優先遍歷 * @param root * @return */ public static List<Integer> BFS(TreeNode root){ Queue<TreeNode> queue=new LinkedList<TreeNode>(); List<Integer> list=new ArrayList<Integer>(); if(root==null){return list;} queue.add(root); while (!queue.isEmpty()){ TreeNode t=queue.remove(); if(t.left!=null){ queue.add(t.left); } if(t.right!=null){ queue.add(t.right); } list.add(t.val); } return list; } }

1. 圖的深度優先遍歷是指,從⼀個節點出發,⼀直沿著邊向下深⼊去找節點,如果找不到了則返回上⼀層找其他節點
2. 圖的⼴度優先遍歷只是,從⼀個節點出發,向下先把第⼀層的節點遍歷完,再去遍歷第⼆層的節點,直到遍歷到最後⼀層

郭慕榮部落格園