acm第二十次二叉樹

2021-09-22 18:51:27 字數 1824 閱讀 5587

一、 二叉樹定義

二叉樹是一種特殊的樹型結構,它的度數為2的樹。即二叉樹的每個結點最多有兩個子結點。每個結點的子結點分別稱為左孩子、右孩子,它的兩棵子樹分別稱為左子樹、右子樹。

二、二叉樹有5中基本形態:

①空二叉樹②僅有根節點的二叉樹③右子樹為空的二叉樹④左右子樹均非空的二叉樹⑤左子樹為空的二叉樹

三、二叉樹術語

前面引入的樹的術語也基本適用於二叉樹,但二叉樹與樹也有很多不同,如:首先二叉樹的每個結點至多只能有兩個結點,二叉樹可以為空,二叉樹一定是有序的,通過它的左、右子樹關係體現出來。

四、一棵深度為k且有2k–1個結點的二叉樹稱為滿二叉樹。這種樹的特點是每層上的結點數都是最大結點數。

五、 深度為k,有n個結點的二叉樹當且僅當其每乙個結點都與深度為k的滿二叉樹中編號從1到n的結點一一對應時,稱為完全二叉樹。

六、二叉樹的儲存結構

①鏈式儲存結構,即單鏈表結構或雙鏈表結構(同樹)。資料結構修改如下:

typedef struct node;

typedef node *tree;

struct node

;tree bt;

或:typedef struct node;

typedef node *tree;

struct node

;tree bt;

②順序儲存結構,即幾個陣列加乙個指標變數。資料結構修改如下:

const int n = 10;

char data[n];

char lchild[n];

char rchild[n];

int bt;

七、遍歷二叉樹的方法

所謂二叉樹的遍歷是指按一定的規律和次序訪問樹中的各個結點,而且每個結點僅被訪問一次。「訪問」的含義很廣,可以是對結點作各種處理,如輸出結點的資訊等。遍歷一般按照從左到右的順序,共有3種遍歷方法,先(根)序遍歷,中(根)序遍歷,後(根)序遍歷。

㈠先序遍歷的操作定義如下:

若二叉樹為空,則空操作,否則

①訪問根結點

②先序遍歷左子樹

③先序遍歷右子樹

void preorder(tree bt) //先序遍歷根結點為bt的二叉樹的遞迴演算法

}㈡中序遍歷的操作定義如下:

若二叉樹為空,則空操作,否則

①中序遍歷左子樹

②訪問根結點

③中序遍歷右子樹

void inorder(tree bt) //中序遍歷根結點為bt的二叉樹的遞迴演算法

}㈢後序遍歷的操作定義如下:

若二叉樹為空,則空操作,否則

①後序遍歷左子樹

②後序遍歷右子樹

③訪問根結點

void postorder(tree bt) //後序遍歷根結點為bt的二叉樹的遞迴演算法

}八、二叉樹的其他操作

1、建立一棵二叉樹

void pre_crt(tree &bt) //按先序次序輸入二叉樹中結點的值,生成

else bt = null;

}2、刪除二叉樹

void dis(tree &bt) //刪除二叉樹

}3.插入乙個結點到排序二叉樹中

void insert(tree &bt, int n)//插入乙個結點到排序二叉樹中

else

} 4.在排序二叉樹中查詢乙個數,找到返回該結點,否則返回null

tree findn(tree bt, int n) //在二叉樹中查詢乙個數,找到返回該結點,否則返回null。

else return null;

}5.用巢狀括號表示法輸出二叉樹

void print(tree bt)//用巢狀括號表示法輸出二叉樹}}

ACM 二叉樹遍歷

題目1184 二叉樹遍歷 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 1562 解決 621 題目描述 編乙個程式,讀入使用者輸入的一串先序遍歷字串,根據此字串建立乙個二叉樹 以指標方式儲存 例如如下的先序遍歷字串 abc de g f 其中 表示的是空格,空格字元代表空樹。建立起此...

《劍指offer》第二十八題(對稱的二叉樹)

面試題28 對稱的二叉樹 題目 請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和 它的映象一樣,那麼它是對稱的。include include binarytree.h bool issymmetrical binarytreenode proot1,binarytreenode p...

二十 刪除二叉樹結點

原理 三種型別 1.刪除的是葉子結點 2.刪除的結點有乙個子節點 3.刪除的結點有兩個子節點 public class tree else else 查詢結點 public node find int value else if current null return current 刪除結點 pu...