二叉樹的簡單實現(遞迴演算法)

2021-08-01 11:43:41 字數 2570 閱讀 6411

在電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹有幾個常用操作,這裡只寫了構造二叉樹,前序遍歷,中序遍歷,後序遍歷,層序遍歷,求樹的總結點,葉節點,樹的深度,樹中第k層的節點數和在樹中查詢乙個節點。主要用遞迴演算法實現。

前序遍歷:根,左,右;

中序遍歷:左,根,右;

後序遍歷:左,右,根;

#pragma once

#include

#include

using namespace std;

template

t>

struct

binarytreenode //定義二叉樹的節點

};template

t>

class

binarytree

binarytree

(t* a, size_t

n, const

t& invalid)

binarytree

(const

binarytree

& t) //拷貝建構函式

binarytree

& operator=(const

binarytree

& t)//賦值運算子的過載

//前序遍歷

void prevorder

()

//中序遍歷

void inorder

()

//後序遍歷

void postorder

()

//層序遍歷

void levelorder

()

//節點數

size_t _size()

//葉子節點數

size_t leafsize

()

//深度

size_t depth

()

//第k層的節點個數

size_t getklevel

(size_t

k)

node* find(const

t& x)

protected:

node* createtree

(t* a, size_t

n, const

t& invalid, size_t& index)

return root;

}node* _copybinarytree(node* root)

node* newroot = new node

(root->_data);

newroot->_left = _copybinarytree(root->_left);

newroot->_right = _copybinarytree(root->_right);

return newroot;

}void destroy

(node* root)

//前序遍歷

void _prevorder(node* root)

//中序遍歷

void _inorder(node* root)

//後序遍歷

void _postorder(node* root)

//層序遍歷(利用佇列實現,先進先出)

void _levelorder(node* root)

cout << endl;

}//查詢

node* _find(node* root, const

t& x)

//節點數

size_t _size(node* root)

//葉子節點數

void _leafsize(node* root)

return _leafsize(root->_left) + _leafsize(root->_right);

}//深度

size_t _depth(node* root)

//第k層節點數

size_t _getklevel(node* root, size_t

k)

protected:

node* _root;

};int main()

; binarytree

t(a,13,0),tree;

tree = t;

cout()<()

<< endl;

cout << tree.leafsize

()<< endl;

tree.levelorder

(); tree.inorder

(); tree.postorder

(); tree.prevorder

(); cout << tree.getklevel

(2)<< endl;

cout << tree.find(5)

<< endl;

return 0;

}

遞迴實現二叉樹

二叉樹是一種非線性結構,用途廣泛。二叉樹的每個結點的度都不大於2,所以一般用二叉鍊錶來實現二叉樹。二叉樹可以分為根結點,左子樹和右子樹,左子樹 右子樹依然這麼劃分,所以用遞迴實現二叉樹的邏輯是比較簡單的,只需不斷對子樹進行劃分即可。include include include using name...

二叉樹的遞迴演算法

二叉樹是一種特殊的資料結構,有乙個根節點,根節點下面有一左一右兩個子節點,每個子節點又有各自的子節點,層層深入成樹狀。關於二叉樹的遍歷我只學習了遞迴遍歷,非遞迴遍歷比較複雜還是很理解。遞迴遍歷分為先序,中序和後序。用三個字母表示遞迴遍歷可以很好理解 d 訪問根節點,l 遍歷根節點的左子樹,r 遍歷根...

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

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