主頁 >  其他 > 二叉樹與線索二叉樹

二叉樹與線索二叉樹

2020-10-22 22:59:35 其他


樹的概述

樹是一種重要的非線性資料結構,直觀地看,它是資料元素(在樹中稱為結點)按分支關系組織起來的結構,很象自然界中的樹那樣,形同下圖,

樹有如下基本概念:

  • 根結點

    根結點是樹的一個組成部分,也叫樹根,每一顆樹都有且僅有一個根結點,它是同一棵樹中除本身外所有結點的祖先,沒有父結點,按上圖的樹結構來看,根節點就是 1,

  • 父結點

    也叫雙親結點,一個結點如果有上一級,則稱這個上一級是它的父結點,如果沒有上一級,則該結點無父結點,按上圖的樹結構來看,可以說是父節點有 1、2、3、5、6、22,

  • 子結點

    一個結點如果有下一級,則稱這個下一級是它的子結點,如果沒有下一級,則該結點無子結點,按上圖的樹結構來看,其實除了根結點以外,各個結點都是它們對應父結點的子結點,

  • 路徑

    從根結點訪問其他結點所需要經過的結點,比如從 1 要走到 31,則路徑是 1、3、31,

  • 結點的度

    一個結點擁有多少個子結點,就認為它的度是多少,比如根結點 1,它的度就是 5,

  • 結點的權

    結點的權值,圖中每個結點都有對應的數字,這些數字就是對應結點的權,

  • 葉子結點

    沒有子結點的結點,按上圖的樹結構來看,葉子結點有 21、221、222、223、31、51、52、61,

  • 子樹

    還是上圖,試著把結點 2 單獨拿出來看,會發現它和它的子結點也能構成樹結構,這顆樹在整顆大的樹里邊,所以稱為子樹,

  • 結點的層次從根開始定義起,根為第一層,根的孩子是二層,依次累計,上圖的樹結構層次就是 4,

  • 樹的高度

    樹的最大層數,上圖的樹結構最大層數就是從根結點開始,到最底層的葉子結點,高度是 4,

  • 森林

    多個樹組成的集合,想象現在有好多顆樹,每一顆樹結構不一,它們共同構成森林,


二叉樹的概述

任何子結點的數量都不超過 2,就是一顆二叉樹,比如之前舉例的圖,明顯就不是二叉樹,二叉樹的子結點分左結點和右結點,不能隨意顛倒位置,

二叉樹也有分類:

  • 滿二叉樹

    所有葉子結點都在最后一層,而且結點總數為 2^n - 1,n 是樹的高度,

  • 完全二叉樹

    所有葉子結點都在最后一層或倒數第二層,且最后一層葉子結點在左邊延續,倒數第二層的葉子結點在右邊連續,即最后一層的葉子結點總是從左往右,倒數第二層總是從右到左,滿二叉樹也是一顆完全二叉樹,


鏈式存盤的二叉樹

顧名思義,用鏈表的方式去實作二叉樹結構,用代碼去實作,首先我們要創建一個結點類,

public class TreeNode {
    // 節點的權
    private int value;
    // 左子結點
    private TreeNode leftNode;
    // 右子結點
    private TreeNode rightNode;

    public TreeNode(int value) {
        this.value = https://www.cnblogs.com/Yee-Q/p/value;
    }
	// 剩下的都是 set/get 方法了
    ...
}

其次,和鏈表有頭結點一樣,二叉樹也需要有根結點輔助操作,作為創建二叉樹的基礎,

public class BinaryTree {

    private TreeNode root;

    public TreeNode getRoot() {
        return root;
    }

    public void setRoot(TreeNode root) {
        this.root = root;
    }
}

萬事具備,向根結點添加左右子結點即可,

public class TestBinaryTree {

    public static void main(String[] args) {
        // 創建二叉樹
        BinaryTree binaryTree = new BinaryTree();
        // 創建根結點
        TreeNode root = new TreeNode(1);
        // 設定根結點
        binaryTree.setRoot(root);
        // 創建一個左結點
        TreeNode rootL = new TreeNode(2);
        // 把新創建的結點設定為根結點的左子結點
        root.setLeftNode(rootL);
        // 創建一個右結點
        TreeNode rootR = new TreeNode(3);
        // 把新創建的結點設定為根結點的右子結點
        root.setRightNode(rootR);
        // 為第二層的左結點創建兩個子結點
        rootL.setLeftNode(new TreeNode(4));
        rootL.setRightNode(new TreeNode(5));
        // 為第二層的右結點創建兩個子結點
        rootR.setLeftNode(new TreeNode(6));
        rootR.setRightNode(new TreeNode(7));
    }
}

遍歷二叉樹

二叉樹的遍歷方式有三種,分別是:前序遍歷、中序遍歷、后序遍歷,

以上圖為例,記住一點,所謂的前序、中序、后序都是參考當前結點的位置,前序遍歷,即是先取當前結點的權,然后是它的左子結點,最后是右子結點,從根結點開始,遍歷程序中每一個結點都要遵守這個規矩,

因此上圖前序遍歷得到的結果是:1、2、4、5、3、6、7;中序遍歷得到的結果是:4、2、5、1、6、3、7;后序遍歷得到的結果是:4、5、2、6、3、7、1,代碼實作用到遞回的思想,

public class TestBinaryTree {

    public static void main(String[] args) {
        // 之前創建二叉樹的代碼,這里就省略不寫了
        ...
        // 前序遍歷樹
        binaryTree.frontShow();
        System.out.println("-----------------");
        // 中序遍歷樹
        binaryTree.midShow();
        System.out.println("-----------------");
        // 后序遍歷樹
        binaryTree.afterShow();
    }
}
public class BinaryTree {

    private TreeNode root;

    public TreeNode getRoot() {
        return root;
    }

    public void setRoot(TreeNode root) {
        this.root = root;
    }

    // 前序遍歷
    public void frontShow() {
        if (root != null) {
        	root.frontShow();
        }
    }

    // 中序遍歷
    public void midShow() {
        if (root != null) {
        	root.midShow();
        }
    }

    // 后序遍歷
    public void afterShow() {
        if (root != null) {
        	root.afterShow();
        }
    }
}
public class TreeNode {

    // 節點的權
    private int value;
    // 左子結點
    private TreeNode leftNode;
    // 右子結點
    private TreeNode rightNode;

    public TreeNode(int value) {
        this.value = https://www.cnblogs.com/Yee-Q/p/value;
    }

    // set/get 方法
	...

    // 前序遍歷
    public void frontShow() {
        // 先輸出當前結點內容
        System.out.println(value);
        // 輸出左結點內容
        if (leftNode != null) {
            leftNode.frontShow();
        }
        // 輸出右結點內容
        if (rightNode != null) {
            rightNode.frontShow();
        }
    }

    // 中序遍歷
    public void midShow() {
        // 輸出左結點內容
        if (leftNode != null) {
            leftNode.midShow();
        }
        // 輸出當前結點內容
        System.out.println(value);
        // 輸出右結點內容
        if (rightNode != null) {
            rightNode.midShow();
        }
    }

    // 后序遍歷
    public void afterShow() {
        // 輸出左結點內容
        if (leftNode != null) {
            leftNode.afterShow();
        }
        // 輸出右結點內容
        if (rightNode != null) {
            rightNode.afterShow();
        }
        // 輸出當前結點內容
        System.out.println(value);
    }
}

二叉樹中結點的查找

查找結點,實際就是把整顆二叉樹遍歷一次,依次比對,找出結果并回傳,這里以前序查找為例,其余的大同小異,

public class TestBinaryTree {

    public static void main(String[] args) {
		// 創建二叉樹
        ...
        // 前序查找
        TreeNode result = binaryTree.frontSearch(5);
        System.out.println(result);
    }
}

public class BinaryTree {

    private TreeNode root;

    public TreeNode getRoot() {
        return root;
    }

    public void setRoot(TreeNode root) {
        this.root = root;
    }

    /**
     * 前序查找
     * @return 目標結點
     */
    public TreeNode frontSearch(int value) {

        return root.frontSearch(value);
    }
}
public class TreeNode {

    // 節點的權
    private int value;
    // 左子結點
    private TreeNode leftNode;
    // 右子結點
    private TreeNode rightNode;

    public TreeNode(int value) {
        this.value = https://www.cnblogs.com/Yee-Q/p/value;
    }

    /**
     * 前序查找
     * @return 目標結點
     */
    public TreeNode frontSearch(int value) {
        TreeNode target = null;
        // 回傳本結點
        if (this.value == value) {
            return this;
        }
        // 向左子結點方向查找
        if (leftNode != null) {
            target = leftNode.frontSearch(value);
        }
        // 如果不為空,證明找到結點,回傳
        if (target != null) {
            return target;
        }
        // 向右子結點方向查找
        if (rightNode != null) {
            target = rightNode.frontSearch(value);
        }
        return target;
    }
}

洗掉二叉樹的結點

對于一顆普通的二叉樹而言,洗掉一個結點就等同于把對應的整顆子樹一并刪掉,之后講到二叉排序樹時,就不是這樣操作了,

洗掉時要區分是根結點還是其他結點,如果是根結點的話,直接置為 null 就好了,但如果不是,則依次比較左右兩個子結點,符合就直接置為 null,如果都不符合,那就遞回呼叫左右結點的 delete 方法,

public class TestBinaryTree {

    public static void main(String[] args) {
		// 創建一顆子樹
        ...
        // 洗掉一個結點
        binaryTree.delete(5);
        binaryTree.frontShow();
    }
}
public class BinaryTree {

    private TreeNode root;

	...

    /**
     * 根據權值洗掉結點
     * @param value 依據權值
     */
    public void delete(int value) {
        // 要洗掉的是根結點
        if (root.getValue() == value) {
            root = null;
        } else {
            // 要洗掉的是其他結點
            root.delete(value);
        }
    }
}
public class TreeNode {

    // 節點的權
    private int value;
    // 左子結點
    private TreeNode leftNode;
    // 右子結點
    private TreeNode rightNode;

	...

    /**
     * 根據權值洗掉結點
     * @param value 依據權值
     */
    public void delete(int value) {
        TreeNode parent = this;
        // 判斷左子結點
        if (parent.leftNode != null && parent.leftNode.value =https://www.cnblogs.com/Yee-Q/p/= value) {
            parent.leftNode = null;
            return;
        }
        // 判斷右子結點
        if (parent.rightNode != null && parent.rightNode.value == value) {
            parent.rightNode = null;
            return;
        }
        parent = leftNode;
        if (parent != null) {
            parent.delete(value);
        }
        parent = rightNode;
        if (parent != null) {
            parent.delete(value);
        }
    }
}

順序存盤的二叉樹

二叉樹還可以用陣列實作,或者說,任意一個陣列都可以轉化為二叉樹,就上圖二叉樹而言,它對應的陣列實作就是 [1,2,3,4,5,6,7],

并不是每顆二叉樹都長得這么規矩,有可能會出現缺胳膊少腿的情況,通常情況下,順序存盤的二叉樹只考慮完全二叉樹(滿二叉樹也是完全二叉樹),否則沒有意義,

順序存盤的二叉樹還有其對應的性質公式,常用的有如下三個:

  • 陣列中第 n 個元素的左子結點下標為:2*n + 1
  • 陣列中第 n 個元素的左子結點下標為:2*n + 2
  • 陣列中第 n 個元素的父節點下標為:(n-1)/ 2

順序存盤的二叉樹的遍歷

我們把一個陣列當成二叉樹作前序遍歷,剩下的中序和后序遍歷也大同小異了,

public class TestBinaryTree {

    public static void main(String[] args) {
		
        int[] data = https://www.cnblogs.com/Yee-Q/p/new int[]{1, 2, 3, 4, 5, 6, 7};
        ArrayBinaryTree arrayBinaryTree = new ArrayBinaryTree(data);
        // 前序遍歷
        arrayBinaryTree.frontShow();

    }
}
public class ArrayBinaryTree {

    private int[] data;

    public ArrayBinaryTree(int[] data) {
        this.data = https://www.cnblogs.com/Yee-Q/p/data;
    }

    public int[] getData() {
        return data;
    }

    public void setData(int[] data) {
        this.data = data;
    }

    public void frontShow() {
        frontShow(0);
    }

    public void frontShow(int index) {
        if (data == null || data.length == 0) {
            return;
        }
        // 先遍歷當前結點的內容
        System.out.println(data[index]);
        // 遍歷左子結點
        if (2 * index + 1 < data.length) {
            frontShow(2 * index + 1);
        }
        // 遍歷右子結點
        if (2 * index + 2 < data.length) {
            frontShow(2 * index + 2);
        }
    }
}

線索二叉樹

可以發現,無論二叉樹的形態如何,總會有一些結點(尤其是葉子結點)的域是沒有被使用的(左右子樹為空),為了提高利用率,讓原來的空域存放指標,指向樹中其他結點,這種指標稱為線索,

在二叉樹的結點加上線索的二叉樹稱為線索二叉樹,對二叉樹以某種遍歷方式(如前序、中序、后序或層次等)進行遍歷,使其變為線索二叉樹的程序稱為對二叉樹進行線索化,

以中序遍歷為例,經過中序線索化的二叉樹應該具有如下結構:對于非子結點的域,左域指向自身的前一個結點,右域指向自身的后一個結點

使用 Java 實作的線索二叉樹如下:

/**
 * 結點類
 */
public class ThreadedNode {

    int value;
    // 左子結點
    ThreadedNode left;
    // 右子結點
    ThreadedNode right;
    // 標識指標型別,為 0 表示指向左/右子結點,為 1 表示指向前驅/后繼結點
    int leftType;
    int rightType;

    public ThreadedNode(int value) {
        this.value = https://www.cnblogs.com/Yee-Q/p/value;
    }

	...
}
public class ThreadedBinaryTree {

    private ThreadedNode root;

    // 用于臨時存盤前驅結點
    private ThreadedNode pre;

    public ThreadedNode getRoot() {
        return root;
    }

    /**
     * 設定根結點
     */
    public void setRoot(ThreadedNode root) {
        this.root = root;
    }

    /**
     * 線索化二叉樹
     */
    public void threadNodes() {
        threadNodes(root);
    }

    public void threadNodes(ThreadedNode node) {
        // 當前結點為 null,直接回傳
        if (node == null) {
            return;
        }
        // 處理左子樹
        threadNodes(node.left);
        // 處理前驅結點
        if (node.left == null) {
            // 讓當前結點的左指標指向前驅結點
            node.left = pre;
            // 改變當前結點左指標的型別
            node.leftType = 1;
        }
        // 處理前驅結點的右指標,如果前驅結點的右指標是 null(沒有指向右子樹)
        if (pre != null && pre.right == null) {
            // 讓前驅結點的右指標指向當前結點
            pre.right = node;
            // 改變前驅結點的右指標型別
            pre.rightType = 1;
        }
        // 每處理一個結點,當前結點就是下一個結點的前驅結點
        pre = node;
        // 處理右子樹
        threadNodes(node.right);
    }

    /**
     * 遍歷線索二叉樹
     */
    public void threadIterate() {
        // 用于臨時存盤當前遍歷結點
        ThreadedNode node = root;
        while (node != null) {
            // 回圈找到最開始的結點
            while (node.leftType == 0) {
                node = node.left;
            }
            // 列印當前結點的值
            System.out.println(node.value);
            // 如果當前結點的右指標指向的是后繼結點,可能后繼結點之后還有后繼結點
            while (node.rightType == 1) {
                node = node.right;
                System.out.println(node.value);
            }
            node = node.right;
        }
    }

    /**
     * 中序遍歷
     */
    public void midShow() {
        if (root != null) {
            root.midShow();
        }
    }
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/186250.html

標籤:其他

上一篇:準備以后都在博客園寫博客了

下一篇:資訊熵為什么要定義成-Σp*log(p)?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more