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

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

樹的深度優先遍歷需要用到額外的資料結構—>棧;而廣度優先遍歷需要佇列來輔助;這裡以二叉樹為例來實現。

import java.util.ArrayDeque;
public class BinaryTree {
    static class TreeNode{
        int value;
        TreeNode left;
        TreeNode right;
        public TreeNode(int value){
            this.value=value;
        }
    }
    TreeNode root;
    public
BinaryTree(int[] array){ root=makeBinaryTreeByArray(array,1); } /** * 採用遞迴的方式建立一顆二叉樹 * 傳入的是二叉樹的陣列表示法 * 構造後是二叉樹的二叉連結串列表示法 */ public static TreeNode makeBinaryTreeByArray(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 depthOrderTraversal(){ if(root==null){ System.out.println("empty tree"); return; } // ArrayDeque<TreeNode> stack=new ArrayDeque<TreeNode>(); Stack<TreeNode> stack = new Stack(); //也可以用棧實現 stack.push(root); while(stack.isEmpty()==false){ TreeNode node=stack.pop(); System.out.print(node.value+" "); if(node.right!=null){ stack.push(node.right); } if(node.left!=null){ stack.push(node.left); } } System.out.print("\n"); } /** * 廣度優先遍歷 * 採用非遞迴實現 * 需要輔助資料結構:佇列 */ public void levelOrderTraversal(){ if(root==null){ System.out.println("empty tree"); return; } ArrayDeque<TreeNode> queue=new ArrayDeque<TreeNode>(); queue.add(root); while(queue.isEmpty()==false){ TreeNode node=queue.remove(); System.out.print(node.value+" "); if(node.left!=null){ queue.add(node.left); } if(node.right!=null){ queue.add(node.right); } } System.out.print("\n"); } /** * 13 * / \ * 65 5 * / \ \ * 97 25 37 * / /\ / * 22 4 28 32 */ public static void main(String[] args) { int[] arr={0,13,65,5,97,25,0,37,22,0,4,28,0,0,32,0}; BinaryTree tree=new BinaryTree(arr); tree.depthOrderTraversal(); tree.levelOrderTraversal(); } }

相關推薦

【算法】【python實現】深度廣度優先

遞歸 for 以及 ima 後序 one treenode 針對 列表   二叉樹的遍歷,分為深度優先遍歷,以及廣度優先遍歷。 在深度優先遍歷中,具體分為如下三種: 先序遍歷:先訪問根節點,再遍歷左子樹,再遍歷右子樹; 中序遍歷:先遍歷左子樹,再訪問根節點,

深度廣度優先

樹的深度優先遍歷需要用到額外的資料結構—>棧;而廣度優先遍歷需要佇列來輔助;這裡以二叉樹為例來實現。 import java.util.ArrayDeque; public class BinaryTree { static class Tr

Java實現圖的深度廣度優先算法

lan 圖結構 廣度搜索 源代碼下載 源代碼 earch isempty 學習 ole 概述: 近期要學習寫網絡爬蟲。所以把圖的深度和廣度搜索都再溫習一下。 圖結構展示: 實現過程: 首先,我們來看看圖結構在代碼中的實現。有三塊邏輯: 1.圖中的節點

Java實現圖的深度廣度優先演算法

<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/

深度優先廣度優先

var length earch rst bre () fun 遍歷 class 1. 二叉樹的深度優先遍歷,使用棧Stack, DFS(Depth First Search) function DFS(root){ var stack = [];

深度優先廣度優先

因此 怎麽 code ron inf 技術 廣度優先搜索 二叉樹的遍歷 eat 對於一顆二叉樹,深度優先搜索(Depth First Search)是沿著樹的深度遍歷樹的節點,盡可能深的搜索樹的分支。以上面二叉樹為例,深度優先搜索的順序為:ABDECFG。怎麽實現這個順序

PHP實現深度優先(前序、中序、後序)廣度優先(層次)

前言: 深度優先遍歷:對每一個可能的分支路徑深入到不能再深入為止,而且每個結點只能訪問一次。要特別注意的是,二叉樹的深度優先遍歷比較特殊,可以細分為先序遍歷、中序遍歷、後序遍歷。具體說明如下: 前序遍歷:根節點->左子樹->右子樹 中序遍歷:左子樹->根節點->右子樹 後

Java構建及深度優先廣度優先

1.工程目錄如下: 2.定義節點資訊的類:TreeNode.java package binarytree; public class TreeNode{ public TreeNode() { // TODO Auto-generated construct

python 用棧佇列實現深度優先(三種)廣度優先

#coding=utf-8 #自定義佇列 class pyqueue(): def __init__(self, size): self.queue = [] self.size = size self.end =

深度優先(棧)廣度優先(佇列)

前序,中序和後序遍歷都是深度優先遍歷的特例 :所以直接先序中序後續遍歷也可以 深度優先遍歷(棧,先壓右節點,再壓左節點) 也就深入的遍歷,沿著每一個分支直到走到最後,然後才返回來遍歷剩餘的節點。二叉樹不同於圖,圖需要標記節點是否已經訪問過,因為可能會存在環,而二叉樹不會

深度優先廣度優先

typedef enum{L,R} tagtype;typedef struct {    Bitree ptr;    tagtype tag;}stacknode;typedef struct{    stacknode Elem[maxsize];    int top;}SqStack;void Po

深度優先廣度優先

D:訪問根結點,L:遍歷根結點的左子樹,R:遍歷根結點的右子樹。 給定一棵二叉樹的前序遍歷序列和中序遍歷序列可以惟一確定一棵二叉樹。 二叉樹的深度優先遍歷的非遞迴的通用做法是採用棧,廣度優先遍歷的非遞迴的通用做法是採用佇列。 深度優先遍歷二叉樹。 1. 中序遍歷(LDR)的遞迴演算法: 若二叉樹為空,則演

相關演算法——建立、、求深度廣度

二叉樹相關的演算法,遍歷使用了遞迴和迭代兩種演算法,可作為結果對比。 理解起來不難,直接上程式碼,有空再補下注釋說明原理。 package com.junyang.algodemo.Tree; import java.util.LinkedList; im

JavaScript實現DOM深度優先廣度優先

深度優先遍歷 // 非遞迴,首次傳入的node值為DOM樹中的根元素點,即html // 呼叫:deep(document.documentElement) function deep (node) { var res = []; // 儲存訪問過的節點 if (node !

廣度優先(從上到下)

問題描述:從上到下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。例如下圖中的二叉樹 ,則依次打印出8,6,10,5,7,9,11 思路分析:按層列印的順序決定了應該先列印根節點,所以我們從樹的根節點開始分析,為了接下來能夠列印值為8的結點的兩

深度優先廣度優先的原理java實現程式碼

樹的深度優先遍歷需要用到額外的資料結構--->棧;而廣度優先遍歷需要佇列來輔助;這裡以二叉樹為例來實現 import java.util.ArrayDeque;publicclassBinaryTree{staticclassTreeNode{int value;

資料結構-以及深度廣度優先(遞迴非遞迴,python實現)

前面我們介紹了佇列、堆疊、連結串列,你親自動手實踐了嗎?今天我們來到了樹的部分,樹在資料結構中是非常重要的一部分,樹的應用有很多很多,樹的種類也有很多很多,今天我們就先來建立一個普通的樹。其他各種各樣的樹將來我將會一一為大家介紹,記得關注我的文章哦~ 首先,樹的形狀就是類似這個樣子的: 它最頂上面的點叫做

七:重建(依據先序(或者後序中序重建

off 相同 tree int roo 節點 先序 throw -a 對於一顆二叉樹。能夠依據先序遍歷(或者後序遍歷)和中序遍歷(樹中不含反復的數字)又一次還原出二叉樹。 解析: 1. 先序遍歷序列的第一個元素必然是根節點,能夠由此獲取二叉樹的根節點。 2. 依

用鄰接矩陣實現的深度優先廣度優先

using ++ while ext empty type push mat ron 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <queue> 4

Dom的深度優先廣度優先

深度 class pos shift ret unshift ext bsp wide //深度優先遍歷的遞歸寫法 function DFTraversal(node) { var nodes = []; if (node != null) {