二叉樹的建立及一些基本操作

2021-08-07 07:50:34 字數 3320 閱讀 8917

.hpp

#define _crt_secure_no_warnings 1

#pragma once

#include

using

namespace

std;

#include

#include

#include

template

struct binarytreenode

binarytreenode* _left;//左指標域

binarytreenode* _right;//右指標域

t _data;//資料域

};

templatet>

class

binarytree

//構造

binarytree(t* arr, size_t size)

//拷貝構造

binarytree(const binarytree& bt)

//賦值操作符過載

binarytree& operator =(const binarytree& bt)

return *this;

}

//簡潔版的寫法

binarytree& operator =(binarytreebt)

//析構函式

~binarytree()

}

public:

//前序遍歷(遞迴)

void prevorder()

//中序遍歷(遞迴)

void inorder()

//後序遍歷(遞迴)

void postorder()

//層序遍歷

void levelorder()

//求樹的深度

void height()

//求葉子節點的個數

void getleefcount()

//求第k層結點的個數

void getklevelnodecount(size_t k)

cout

<< _getklevelnodecount(_proot, k) << endl;

}// 值為data的結點是否存在

node* find(const t& data)

//求pnode的雙親

node* getparent(node* pnode)

//求一棵樹一共有多少結點

void gettreenodecount()

//判斷乙個結點在不在樹中

bool isnodeintree(node* pnode)

// 獲取二叉樹的左孩子

node* getleftchild(node* pcur)

// 獲取二叉樹的右孩子

node* getrightchild(node* pcur)

protected:

//構造的實現

void _createbinarytree(node*& proot, t* arr, size_t size, size_t& index)

}

//拷貝構造實現

node* _copybinarytree(node* proot)

//銷毀函式

void _destroytree(node*& proot)

//前序遍歷(遞迴)實現方法

void _prevorder(node*& proot)

//前序遍歷(迴圈)實現方法

void _prevorder(node*& proot)

}

//中序遍歷(遞迴)實現方法

void _inorder(node*& proot)

//中序遍歷(迴圈)實現方法

void _inorder(node*& proot)

node* node = s.top();

s.pop();

cout

<< node->_data << " ";

cur = node->_right;

}}

//後續遍歷(遞迴)實現方法

void _postorder(node*& proot)

//後續遍歷(迴圈)實現方法

void _postorder(node*& proot)

while (!s2.empty())

}}

//層序遍歷樹

void _levelorder(node*& proot)

cout

<< endl;

}

//求高度實現實現方法

size_t _height(node*& proot)

//求也只結點的個數

size_t _getleefcount(node*& proot)

//求第k層結點的個數

size_t _getklevelnodecount(node*& proot,size_t k)

//查詢乙個值為data的元素是不是在樹裡面

node* _find(node* proot, const t&

data)

//求pnode的雙親

node* _getparent(node* proot, node* pnode)

//求二叉樹中總結點的個數

size_t _gettreenodecount(node* proot)

//判斷乙個結點在不在樹中

bool _isnodeintree(node*& proot,node* pnode)

protected:

node* _proot;

};

二叉樹的一些基本操作

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

二叉樹的一些操作

標頭檔案 樹.h pragma once include include include include include include typedef char datatype typedef struct btnodebtnode btnode greattree datatype pre,i...

二叉樹的一些操作

1 include 2 include 3 4 typedef struct binodebinode,bitree 910 void createbitree bitree t 建立二叉樹 11int gettreeheight bitree t 返回二叉樹高度 12int getallnode ...