1. 程式人生 > >二叉樹陣列順序儲存與遍歷

二叉樹陣列順序儲存與遍歷

#include <iostream>
#include <string>
using namespace std;
#define MAXSIZE 100


class BiTree
{
private:
char data[MAXSIZE];//data[0]不用 
int n;
public:
BiTree();
void Insert(char x);
void PreOrder(int i);
void InOrder(int i);
void PostOrder(int i);
};
BiTree::BiTree()
{
n=0;
}


void BiTree::Insert(char x)
{
n++;
data[n]=x;
}
void BiTree::PreOrder(int i)
{
if(data[i]!='/')
{
cout<<data[i]<<" ";
if(2*i<=n&&data[2*i+1]!='/')
PreOrder(2*i);
if(2*i+1<=n&&data[2*i+1]!='/')
PreOrder(2*i+1);
}
}
void BiTree::InOrder(int i)
{
if(data[i]!='/')
{
if(2*i<=n&&data[2*i+1]!='/')
PreOrder(2*i);
cout<<data[i]<<" ";
if(2*i+1<=n&&data[2*i+1]!='/')
PreOrder(2*i+1);
}
}
void BiTree::PostOrder(int i)
{
PreOrder(2*i);
PreOrder(2*i+1);
if(data[i] != '/')
{
cout<<data[i]<<" ";
}
}
int main()
{
string str = "ABCDE/G//JK//NO";
//while(cin>>str)
//{
BiTree tree;
for(int i=0;i < str.length();i++)
{
tree.Insert(str[i]);
}
tree.PreOrder(1);
cout<<endl;
tree.InOrder(1);
cout<<endl;
tree.PostOrder(1);
cout<<endl; 
//}
return 0;

相關推薦

陣列順序儲存

#include <iostream> #include <string> using namespace std; #define MAXSIZE 100 class BiTree {private:char data[MAXSIZE];//dat

資料結構——的結點插入

BTree.h: #ifndef _BTREE_H_ #define _BTREE_H_ //二叉樹的結點資料型別 typedef struct _btreeNode {     int data;     struct _btreeN

嚴蔚敏 資料結構 鏈式儲存結構 等操作

課本 《資料結構(C語言版)(第2版)》 嚴蔚敏版 樹結構的學習。 編譯環境:DEV C++ 檔案格式為 cpp(c++檔案型別),前者的引用函式,在 C 的情況下沒完成。 實現: 二叉樹的先序遍歷

順序儲存實現及

關於二叉樹的實現,常見的大概有三種實現方法: 順序儲存:採用陣列來記錄二叉樹的所有節點 二叉連結串列儲存: 每個節點保留一個left,right域,指向左右孩子 三叉連結串列儲存: 每個節點保留一個left, right, parent域,

陣列儲存森林,實現構建查插刪

#include <stdio.h> #include <stdlib.h> typedef struct Bnode{ //儲存結點的父結點,子結點數目,自身(同時也是其序號)以及所在樹的根結點 int father,son_n

數據結構算法第10周作業——的創建和算法

技術分享 truct order traverse eof 結構 後序遍歷 lib void 一、二叉樹的創建算法(遞歸方式) 二、二叉樹的先序、中序和後序遍歷算法 #include<stdio.h>#include<stdlib.h>typedef

《大話資料結構9》—— “順序儲存結構”——C++程式碼實現

  順序儲存結構: 二叉樹的順序儲存結構就是用一維陣列儲存二叉樹中的結點,並且結點的儲存位置,也就是陣列的下標要能體現結點之間的關秀,比如雙親與孩子的關係,左右結點的兄弟關係。 完全二叉樹: 完全二叉樹由於其結構上的特點,通常採用順序儲存方式儲存。一棵有n個結點的完全二

順序儲存結構

#include <iostream>using namespace std;#define Max 16void Create_Tree(int *Tree,int *node,int length){ int i; int level; Tree[1]=node[1]; for(i=

順序儲存原理及實現過程

二叉樹的順序儲存,實際上就是使用陣列儲存二叉樹。 使用陣列儲存二叉樹的實現思想是將二叉樹從根節點按照層次順序依次儲存在陣列中,但需要注意的是,此方式只適用於完全二叉樹,如果要使用陣列儲存普通二叉樹,需要提前將該二叉樹轉化為完全二叉樹。 完全二叉樹,即二叉樹除了最後一層節點外,其餘各節點都既有左節點和右節點

【資料結構】的前中後層次(遞迴非遞迴)

水一波作業 #include <iostream> #include <cstring> //#pragma GCC optimize(2) #include<time.h> #include <map> #include &

】根據兩種順序確定結構(build-tree)

題目描述 輸入 第1行:二叉樹的前序遍歷順序第2行:中序遍歷順序 輸出 二叉樹的後序遍歷順序 樣例輸入 Copy (如果複製到控制檯無換行,可以先貼上到文字編輯器,再複製) ABCDEFGH CBEDAGHF 樣例輸出 CEDBHGFA -----------------

看資料結構寫程式碼(22) 順序儲存方式

二叉樹 是 一個 節點 的度最多是2 ,並且區分 左右子樹的 特殊樹。 二叉樹 有一些特性,這些特性 是 寫 二叉樹順序表的 重要依據,所以先介紹一下: 1.k層的二叉樹,最多有  2 的 k次方 -1 個節點,如果 節點數達到最大值,稱為 滿二叉樹。 2.第k層的二叉樹,

順序儲存和基本操作

一、二叉樹的定義: 二叉樹是n個結點的有限集合,當n=0時稱為空樹,否則:(1)有且只有一個特殊的被稱為樹的根結點;(2)若n>1時,其餘的結點被分為兩個互不相交的子集,稱為左右子樹,並且左右子樹都是二叉樹;可以看出二叉樹的定義是遞迴的。 二、二叉樹的性質: (1)在

順序儲存

#include <iostream>using namespace std;#define Max 16void Create_Tree(int *Tree,int *node,int length){int i;int level;Tree[1]=node[1

資料結構實驗之五:層序(陣列模擬佇列)

Problem Description 已知一個按先序輸入的字元序列,如abd,,eg,,,cf,,,(其中,表示空結點)。請建立二叉樹並求二叉樹的層次遍歷序列。 Input  輸入資料有多行,第

資料結構之---C語言實現順序儲存

//二叉樹的順序儲存 //這裡利用迴圈佇列儲存資料 //楊鑫 #include <stdio.h> #include <math.h> #include <stdlib.h> #include <string.h> #defi

【資料結構】順序儲存

原理 對於具有n個節點的完全二叉樹,如果按照從上至下和從左至右的順序對所有節點序號從0開始順序編號,則對於序號為 i(0<=i < n)的節點有: 1)如果i〉0,則序號為i節點的雙親節點的序號為(i-1)/2(/為整除);如果i=0,則序

LeetCode題庫解答分析——#103. 的鋸齒形層次BinaryTreeZigzagLevelOrderTraversal

給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。例如:給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回鋸齒形

【資料結構】順序儲存、鏈式儲存)的JAVA程式碼實現

二叉樹是一種非線性的資料結構。它是由n個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩顆不相交的、被分別稱為左子樹、右子樹的二叉樹組成。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也可以稱做一個結點。二叉樹是有序的,即若將其左右兩個子樹顛倒

的深度優先dfs(前序、中序和後序;遞迴非遞迴)

//前序遍歷 //遞迴實現:根左右 void preOrder1(BinTree *root) { if (root != NULL) { cout<<root->data<<endl; preOrder1(root->lch