二叉樹的簡單實現

2021-07-30 06:21:29 字數 3235 閱讀 5229

本篇博文主要關注c++資料結構二叉樹的簡單實現,主要實現二叉樹類的構建,包括二叉樹的構造、拷貝構造、析構函式、賦值運算子的過載、前序中序後序層序遍歷二叉樹、查詢指定節點、查詢節點的總個數等功能函式,主要依靠遞迴演算法完成。

樹的結點型別主要是根結點,指向右孩子的指標和指向左孩子的指標。下面是結點的建構函式:

struct binarytreenode

};`

下面可以直接進行二叉樹類:

template

t>

class

binarytree

binarytree

(t* a, size_t

size, const

t& invalid)

binarytree

(const

binarytree

&t)~binarytree

()

binarytree

& operator=(binarytree

t)return *this;

}protected:

node* makebinarytree

(t* a,size_t

size,const

t& invalid,size_t & index)

return root;

}}

二叉樹的前序遍歷:根(當前)結點->左結點->右結點;

中序遍歷:左結點->根(當前)結點->右結點;

後序遍歷:左結點->右結點->根(當前)結點;**實現:

void _prevorder(node* _root)

void _inorder(node* _root)

void _postorder(node* _root)

層序遍歷:就是一層一層的訪問二叉樹,利用佇列可以實現

void levelorder()

if (top->_right)

}}

其餘函式相對簡單,以下是原始碼:

#pragma once

#include

#include

#include

#include

#include

using

namespace

std;

template

struct binarytreenode

};template

class binarytree

binarytree(t* a, size_t size, const t& invalid)

binarytree(const binarytree&t)

~binarytree()

binarytree& operator=(binarytreet)

return *this;

}void prevorder()//前序遍歷

void inorder()//中序遍歷

void postorder()

void prevorder_nonr()

node* top = s.top();

s.pop();

cur = top->_right;

}cout

<< endl;

}void inordere_nonr()

node* top = s.top;

cout

<< top->_data << "";

s.pop();

cur = top->_right;

}cout

<< endl;

}void prevordernonr()

node* top = s.top();

if (top->_right == null || prev == top->_right)

else

}cout

<< endl;

}void levelorder()

if (top->_right)}}

size_t findkleves(size_t k)

size_t findx(const t&x)

size_t size()

size_t depth()

protected:

node* _root;

protected:

node* makebinarytree(t* a,size_t size,const t& invalid,size_t & index)

return root;

}node* copytree(const binarytree* _root)

node* root = new node(_root->_data);

root->_left = copytree(_root->_left);

root->_right = copytree(_root->_right);

return root;

}void destroy(node* root)

destroy(root->_left);

destroy(root->_right);

delete root;

}void _prevorder(node* _root)

void _inorder(node* _root)

void _postorder(node* _root)

size_t _findkleves(node* _root, size_t k)

size_t left = _findkleves(cur->_left, k - 1);

size_t right = _findkleves(cur->_right, k - 1);

return left + right;

}node* _findx(node* _root, const t& x)

else

}return ret;

}size_t _size(binarytreenode* _root)

size_t _depth(node* _root)

};void testbinarytree()

; binarytree t(a, 10, '#');

void prevorder();//前序遍歷,其餘測試可以自行新增。

}

二叉樹 排序二叉樹的簡單實現

二叉樹 排序二叉樹 include using namespace std 二叉樹的節點 date 資料 left 指向二叉樹的左子樹 right 指向二叉樹的右子樹 template struct node template class btree public btree root null c...

C 實現簡單二叉樹

二叉樹是重要的資料結構,這裡用c 簡單實現,暫時不考慮其增加 刪除和修改。二叉樹在底層其實就是用陣列儲存,可以用陣列實現二叉樹 首先建立乙個結構體,在其中儲存指標以及資料,這個結構體作為二叉樹的節點使用 template t struct binarytreenode 定義節點 然後就可以利用陣列建...

9 二叉樹簡單實現

樹 多叉樹轉換成二叉樹 左孩子右兄弟 從根節點 左下方開始,節點左側放自己左側的孩子,右側放自己右側的兄弟。二叉樹滿二叉樹 一顆深度為k且有 2的k次方減1 個節點 完全二叉樹 除最後一層外,每一層上的節點數均達到最大值 在最後一層只缺少右邊的若干節點。示意圖 遍歷 先序遍歷 根 左 右 遍歷順序 ...