1. 程式人生 > >《資料結構導論之樹、二叉樹、森林間的轉換》

《資料結構導論之樹、二叉樹、森林間的轉換》

前言

    樹、二叉樹、森林間一共有三種轉換,作為一種應用題的型別出現,小編在這裡以真題為典型例證為大家撰寫轉換過程,願為大家開闊思路,增添自考勝算。

基本概念

英文名字為Tree,一類重要的資料結構,是n(n≥0)個結點的有限集合。相關特徵:

(1)當n=0時,即為空樹

(2)當n>0時,有且僅有一個稱為根的結點,除根結點外,其餘結點分為m(m≥0)個互不相交的非空集合T1,T2,....,這些集合中的每一個都是一棵樹,稱為根的子樹。

有圖有真相:


二叉樹

    英文名字為BinaryTree,n(n≥0)個元素的有限集合,該集合或者為空,或者由一個根及兩棵互不相交的左子樹和右子樹組成,其中左子樹和右子樹也均為二叉樹。

有圖有真相:


森林

    英文名字為Forest,m(m≥0)棵互不相交的樹的集合,樹的每個結點的子樹是森林。刪除一個非空樹的根結點,它的子樹便構成森林。

有圖有真相:


具體轉換

樹→二叉樹

原理:

(1)將所有兄弟結點連線起來

(2)保留第一個兄弟結點與父結點的連線,斷開其他兄弟結點與父結點的連線,

(3)以根結點為軸心按順時針的方向旋轉45°角

例證:

2014年10月

32.將題32圖所示的一棵樹轉換為二叉樹。


(1)將所有兄弟結點連線起來

(2)保留第一個兄弟結點與父結點的連線,斷開其他兄弟結點與父結點的連線

 (3)以根結點為軸心按順時針的方向旋轉45°角


森林→二叉樹

原理:

(1)將每棵樹轉換成相應的二叉樹

(2)將得到的各棵二叉樹的根結點看作是兄弟連線起來

例證:

此題由2011年10月的真題轉化而來(目前沒有考過這種轉換)

將圖所示的森林轉換為對應的二叉樹


(1)將每棵樹轉換成相應的二叉樹

    →        

      →        

      →    

(2)將得到的各棵二叉樹的根結點看作是兄弟連線起來


二叉樹→森林

原理:

(1)在待轉換的二叉樹中,斷開根結點與右孩子的連線,保留左孩子的連線,得到兩棵二叉樹

(2)將兩棵二叉樹中的孩子結點的右孩子分別與父結點斷開,與根結點相連,成為最初根結點左孩子的兄弟結點

(3)將二叉樹中的孩子結點的左孩子逆時針旋轉45°

例證:

2011年10月

31.將題31圖所示的一棵二叉樹轉換成森林

(1)在待轉換的二叉樹中,斷開根結點與右孩子的連線,保留左孩子的連線,得到兩棵二叉樹

          →   

(2)將兩棵二叉樹中的孩子結點的右孩子分別與父結點斷開,與根結點相連,成為最初根結點左孩子的兄弟結點

  →  

(3)將二叉樹中的孩子結點的左孩子逆時針旋轉45°

     →        

           →     

最終結果為:

結語

    樹、二叉樹、森林三者之間的轉換中,自我認為樹與二叉樹之間轉換是基礎,二叉樹→森林和森林→二叉樹之間轉換是以樹→二叉樹的轉換前提的,只要理解其中的核心觀念,無論在考試中以怎樣的形式出現,大家都可以輕而易舉做出來。願大家自考加油哦


相關推薦

郝斌資料結構入門--P75-鏈式具體遍歷程式演示

郝斌資料結構入門--P75-鏈式二叉樹具體遍歷程式演示   知道遞迴的實現與應用,二叉樹的遍歷就容易了。   程式碼如下: #include <stdio.h> #include <malloc.h> struct BTNode {

資料結構實驗四順序表

#include<iostream> #include<string> #define MaxSize 100 using namespace std; class Tree {private: string array[100];

軟考:資料結構基礎——建立順序完全

  首先是關於樹,二叉樹,完全二叉樹的一些知識 一、樹     (一)、基本概念            1. 度:一個節點的子樹的個數    &

資料結構與演算法11-線索

線索二叉樹 線索二叉樹的原理 我們把指向前驅和後繼的指標稱為線索,加上線索的二叉連結串列稱為線索,加上線索的二叉連結串列為線索連結串列,相應的二叉樹就稱為線索二叉樹(Threaded  Binary  Tree) lchild ltag

SDUTOJ1291資料結構上機測試4.1:的遍歷與應用1

以SDUTOJ1291資料結構上機測試4.1:二叉樹的遍歷與應用1為例 https://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/2711/pid/1291 思路: 遞迴實現,化解子問

資料結構:二分查詢與

關於二分查詢,原理其實不難,而且java Arrays類裡面有一個sorts()方法,可以先對資料進行排序,然後呼叫binarySerarch()方法,這個方法就是進行二分查詢用的。 下面是JDK的原始碼: private static int binarySe

資料結構知識整理 - 遍歷的應用

主要內容 建立二叉連結串列 複製二叉樹 計算二叉樹深度 統計二叉樹的結點個數   建立二叉連結串列 在先序遍歷的遞迴演算法中,將輸出語句改為輸入語句即可。(可回顧“遞迴演算法”) 需要注意的是,遞迴演算法會遍歷滿二叉樹中的每一個結點,

資料結構-劍指offer-把列印成多行

題目:從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。因為要按層列印,首先想到的是層次遍歷。在二叉樹的深度這道題中,首先應用到了層次遍歷。每一層的節點值存入一個小vector c,再把小vector c存到大vector vec中,列印vec。(題目沒有要求換

資料結構)第五章

二叉樹 資料結構大致分為兩種型別:基於陣列的實現和基於連結串列的實現。 兩種結構的特點: 基於陣列的實現:通過下標或秩,在常數時間內找到目標物件。插入和刪除,需要耗費線性時間。 基於連結串列的實現:藉助引用或位置物件,在常數時間內插入或刪除元素。但需要線性時間,對整個結構進行遍歷查詢

[資料結構]實驗五_順序

#include<iostream> using namespace std; class SeqBinaryList { public: //T init(); SeqBinaryList() {} //~SeqBinaryList(); void

資料結構-----後序遍歷非遞迴演算法(利用堆疊實現)

一、非遞迴後序遍歷演算法思想 後序遍歷的非遞迴演算法中節點的進棧次數是兩個,即每個節點都要進棧兩次,第二次退棧的時候才訪問節點。 第一次進棧時,在遍歷左子樹的過程中將"根"節點進棧,待左子樹訪問完後,回溯的節點退棧,即退出這個"根"節點,但不能立即訪問,只能藉助於這個"根"

資料結構 C語言 鏈式

【問題描述】 採用二叉連結串列作為二叉樹的儲存結構實現各項功能 【任務要求】 (1) 輸入二叉樹的先序序列,建立二叉樹; (2) 用程式實現二叉樹的中序遍歷; (3) 編寫程式求二叉

資料結構:簡單算數表示式的構建和求值

內容:編寫一個程式,先用二叉樹來表示一個簡單算術表示式,樹的每一個結點包括一個運算子或者運算數。在簡單算術表示式中只含+,-,*,/ 和一位正整數且格式正確(不包含括號),並且要先按照先乘除後加減的原則構造二叉樹,然後由對應的二叉樹計算該表示式的值。 解: 這裡用非遞迴演算

資料結構 BFS層次遍歷【C語言版本】

//案例輸入(其中的“#”表示空,並且輸入過程中不要加回車) 輸入序列ABC##DE#G##F### 輸入序列ABD##E##CF#G### 輸入序列ABD###C## #include <stdio.h> //測試OK,可以執行 #include <s

C++資料結構--按層次遍歷

class node {    public:       T val; //節點值 node<T>* left; //左節點  node<T>* right; //右節點 node():val(T()),left(nullptr),right(nullptr){} node(T v,

(C語言-資料結構與演算法)還原

/*根據先序和中序遍歷輸出的字串還原二叉樹,然後輸出後序遍歷*/ #include<stdio.h> #include<stdlib.h> #define MAX 20 char preOrder[MAX] = "abdgcefh";//定義全域性變數,先序字串 char midOrd

資料結構-判斷是否為完全

【題目來自灰灰考研】 層次遍歷題目變形: 1.二叉樹採用二叉連結串列進行儲存(如下所示),每個結點包含資料域Data,左孩子指標域left和右孩子指標域right。請設計演算法判斷樹是否為完全二叉樹。 Typedef struct BitNode{    TEle

【java 資料結構】還不會?一篇搞定

二叉樹是我們常見的資料結構之一,在學習二叉樹之前我們需要知道什麼是樹,什麼是二叉樹,本篇主要講述了二叉樹,以及二叉樹的遍歷。 你能get到的知識點? 1、樹的介紹 2、二叉樹的介紹 3、二叉樹遍歷的四種方法 4、牛客題目:反轉二叉樹 目錄你能get到的知識點?一、知識預備1、樹2、樹的相關術語介紹1、二叉樹2

資料結構導論森林轉換

前言     樹、二叉樹、森林間一共有三種轉換,作為一種應用題的型別出現,小編在這裡以真題為典型例證為大家撰寫轉換過程,願為大家開闊思路,增添自考勝算。 基本概念 樹 英文名字為Tree,一類重要的資料結構,是n(n≥0)個結點的有限集合。相關特徵: (1)當n=0時,即

資料結構-平衡(AVL)

背景 不同結構的二叉查詢樹,查詢效率有很大的不同。如何解決這個問題呢?關鍵在於如何最大限度的減小樹的深度。正是基於這個想法,平衡二叉樹出現了。 前言 平衡二叉搜尋樹(英語:Balanced Binary Tree)是一種結構平衡的二叉搜尋樹。 它能在O(log n)時間內完成插入、查詢和