1. 程式人生 > 其它 >(JAVA)二叉樹的補空法建立與前中後遍歷 層序遍歷

(JAVA)二叉樹的補空法建立與前中後遍歷 層序遍歷

技術標籤:資料結構演算法JAVA演算法二叉樹java

二叉樹的建立(補空法)
(按先序建立,先根再左再右)
這裡就不過多介紹了,附上詳細程式碼
在這裡插入圖片描述
2,先中後序在前面的部落格中已經介紹過,這裡主要介紹層序遍歷。
(1)層序遍歷是先遍歷第一層,再第二層,再第三層。。。同一層按從左往右的順序依次遍歷。
(2)不難發現,先被訪問的節點,其孩子也先被訪問,所以我們可以用到佇列,當該節點被訪問時,把其孩子入隊。
(3)我用圖詳細介紹一下
比如該樹
在這裡插入圖片描述
①首先建立一個佇列q,令樹根入隊。如圖所示。注意,實際上是指向樹根a的指標入隊。在這裡插入圖片描述
②隊頭元素出隊,輸出A,同時令A的孩子bc入隊,從左向右順序,如果是普通樹,則包含所有孩子。佇列和二叉樹狀態,如左圖和右圖所示。在這裡插入圖片描述


在這裡插入圖片描述
③隊頭元素出隊,輸出B,同時令B的孩子de入隊,佇列和二叉樹的狀態如圖所示在這裡插入圖片描述
在這裡插入圖片描述
④隊頭元素出隊,輸出C。同時令c的孩子f入隊。佇列和二叉樹狀態如圖所示。
在這裡插入圖片描述
在這裡插入圖片描述
⑤最後直到佇列為空演算法結束。
詳細程式碼如下

package Tree;

import java.util.LinkedList;
import java.util.Scanner;

public class bianli {
    public static class BNode{
        String data;
        BNode lchild,rchild;
    }

    public static
BNode creattree(BNode t){ String ch; Scanner scanner=new Scanner(System.in); ch=scanner.nextLine(); if(ch.equals("#")){ t=null; } else{ t=new BNode(); t.data=ch; t.lchild=creattree(t.lchild); t.
rchild=creattree(t.rchild); } return t; } static void preorder(BNode t){ if(t!=null){ System.out.print(t.data+" "); preorder(t.lchild); preorder(t.rchild); } } static void inorder(BNode t){ if(t!=null){ inorder(t.lchild); System.out.print(t.data+" "); inorder(t.rchild); } } static void postorder(BNode t){ if(t!=null){ postorder(t.lchild); postorder(t.rchild); System.out.print(t.data+" "); } } static boolean levelorder(BNode t){ if(t==null){ return false; } BNode p; LinkedList<BNode> queue=new LinkedList<>(); queue.push(t); while (!queue.isEmpty()){ p=queue.pop(); System.out.println(p.data); if(p.lchild!=null){ queue.add(p.lchild); } if(p.rchild!=null){ queue.add(p.rchild); } } return true; } public static void main(String[] args){ System.out.println("按先序輸入二叉樹中節點的值(孩子為空時輸入#)"); BNode node=new BNode(); node=creattree(node); System.out.println("先序"); preorder(node); System.out.println(); System.out.println("中序"); inorder(node); System.out.println(); System.out.println("後序"); postorder(node); System.out.println(); System.out.println("層序"); levelorder(node); } }