本篇博文主要關注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 個節點 完全二叉樹 除最後一層外,每一層上的節點數均達到最大值 在最後一層只缺少右邊的若干節點。示意圖 遍歷 先序遍歷 根 左 右 遍歷順序 ...