二叉樹的一些基本運算

2021-06-15 04:46:03 字數 3203 閱讀 2548

樹型結構的用途很廣,其中二叉樹尤為重要。

這裡列出了幾種基本的演算法

(1)遍歷二叉樹。(先序遍歷,遞迴方式,採用廣義表的格式輸出)

(2)求某節點的左、右孩子節點值

(3)求二叉樹的深度(遞迴方式)

(4)求二叉樹的寬度(類似層次遍歷,用到佇列)

(5)求二叉樹的節點個數(遞迴)

(6)求二叉樹葉子節點個數(遞迴)

**裡寫的很明白了,上面的括號是下面的**實現方式的簡述。

#include "stdafx.h"

#include #include #include "algo7_1.h"

//---------------------------------------

void createbtnode(btnode *&bt,char str)

else

k = 0;

}} //switch

j++;

ch = str[j];

} //while

}//尋找指定結點

btnode * findnode(btnode * bt,elemtype e) //遞迴

else if (bt->data == e)

else

else

return findnode(bt->rchild,e); }}

//返回bt指向的左結點

btnode * lchildnode(btnode *bt)

else

return bt->lchild;

}//返回bt指向的右結點

btnode * rchildnode(btnode *bt)

else

return bt->rchild;

}//求二叉樹bt的深度

int btnodedepth(btnode *bt)

else }

//以廣義表的方式輸出二叉樹

void dispbtnode(btnode * bt)

else

if (bt->rchild)

}}//返回二叉樹bt的寬度

int btwidth(btnode * bt)

que[maxsize];

btnode * aux;

int front = 0,rear = 0;

int max = 0,lnum = 0;

struct

lsum = ;

if (!bt)

else

aux = que[front].p;

lnum = que[front].lno;

front++;

if (aux->lchild != null)

if (aux->rchild != null)

} //while

return max; }}

//求二叉樹bt的結點個數

int nodes(btnode *bt) //遞迴

else }

//求二叉樹bt的葉子結點個數

int leafnodes(btnode *bt)

else if (bt->lchild == 0 && bt->rchild == 0)

else

}

//algo7_1.h

#define ok 1

#define err 0

#define true 1

#define false 0

#define null 0

typedef int bool;

#define maxsize 100

typedef char elemtype;

typedef struct _node

btnode;

void createbtnode(btnode * &bt,char str ); //根據str串,用廣義表的表現形式,來生成樹

//尋找指定結點

btnode * findnode(btnode * bt,elemtype e); //遞迴

//返回bt指向的左結點

btnode * lchildnode(btnode *bt);

//返回bt指向的右結點

btnode * rchildnode(btnode *bt);

//求二叉樹bt的深度

int btnodedepth(btnode *bt);

//以廣義表的方式輸出二叉樹

void dispbtnode(btnode * bt);

//返回二叉樹bt的寬度

int btwidth(btnode * bt);

//求二叉樹bt的結點個數

int nodes(btnode *bt); //遞迴

//求二叉樹bt的葉子結點個數

int leafnodes(btnode *bt);

// proj7_1.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include "algo7_1.h"

#include "string.h"

int _tmain(int argc, _tchar* argv)

rp = rchildnode(p);

if (rp)

}printf("\n");

printf("(3)the binary tree's depth:%d\n",btnodedepth(b));

printf("(4)the binary tree's width:%d\n",btwidth(b));

printf("(5)the binary tree's sum node:%d\n",nodes(b));

printf("(6)the binary tree's leaf node:%d\n",leafnodes(b));

return 0;

}

測試二叉樹:

結果:

二叉樹的一些基本操作

看東西容易,寫東西確實就複雜多了呀,花了兩天時間把二叉樹的資料結構及一些相關基本演算法的原理認真研究了下,並寫出了相應的 包括二叉樹的前序建立 前中後序遍歷 層序遍歷 刪除 通過前序和中序序列構造二叉樹等等 include 定義資料元素型別 typedef int element 定義二叉樹節點 t...

二叉樹 基本運算

一 括號表示法建二叉樹 核心 void make btree print b view code 二 查詢節點 核心 btnode find node btnode b1,char x 查詢節點數值等於x的節點 view code 三 求樹高 核心 int get high const btnode...

二叉樹的基本運算

今天資料結構實驗課,做實驗,二叉樹的基本運算,題目要求挺長的,上課坐著沒事幹,寫了一點,放這以後還能看看。呵呵 題目要求 問題描述 建立一棵二叉樹,試程式設計實現二叉樹的如下基本操作 1.按先序序列構造一棵二叉鍊錶表示的二叉樹t 2.對這棵二叉樹進行遍歷 先序 中序 後序以及層次遍歷,分別輸出結點的...