二叉樹是一種非線性結構,用途廣泛。二叉樹的每個結點的度都不大於2,所以一般用二叉鍊錶來實現二叉樹。
二叉樹可以分為根結點,左子樹和右子樹,左子樹、右子樹依然這麼劃分,所以用遞迴實現二叉樹的邏輯是比較簡單的,只需不斷對子樹進行劃分即可。
#include
#include
#include
using
namespace
std;
template
struct binarytreenode
};template
class binarytree
~binarytree()
binarytree(const t* array, size_t size, const t& invalid)
binarytree(binarytree&t) //拷貝構造
binarytree& operator = (binarytree&t)
return *this;
}//葉子節點的個數
size_t leaf()
//節點的總個數
size_t size()
//樹的深度
size_t depth()
//前序遍歷
void preveorder()
//中序遍歷
void inorder()
//後序遍歷
void backorder()
//層序遍歷
void tierorder()
//二叉樹的映象——>遞迴
void mirrorbinarytree()
// 求二叉樹的映象--->非遞迴
void mirrorbinarytree_nor()
// 獲取第k層節點的個數
size_t getklevelnodecount(size_t k)
// 值為data的結點是否存在
node* find(const t& data)
// 判斷乙個結點是否在二叉樹中
bool isnodeintree(node* pnode)
// 獲取指定結點的雙親
node* getparent(node* pnode)
// 獲取二叉樹的左孩子
node* getleftchild(node* pcur)
// 獲取二叉樹的右孩子
node* getrightchild(node* pcur)
// 判斷一棵二叉樹是否為完全二叉樹
bool iscompletebinarytree()
// 獲取二叉樹中第k層結點的個數
size_t getklevelnodecount(int k)
// 查詢data是否在二叉樹中
二叉樹遍歷遞迴實現
include include define flag int define l 0 define r 1 typedef struct tree tree tree init tree int data void destroy tree tree root void insert tree t,...
c 實現二叉樹(遞迴)
首先先來看一下樹的結構 樹是n n 0 個有限個資料的元素集合,形狀像一顆倒過來的樹。而二叉樹就是樹的一種特殊結構 完全二叉樹的陣列表示 鍊錶儲存表示 下面我就實現一下二叉鏈的這種結構 首先是它的節點的結構 template struct binarytreenode public binarytr...
遍歷二叉樹 遞迴實現
二叉樹作為樹的一種,是一種重要的資料結構,也是面試官經常考的東西。二叉樹中的面試題比較常見的題型大概有下面幾個 建立一顆二叉樹 先序,中序,後序 遍歷一顆二叉樹 先序,中序,後序和層次遍歷 求二叉樹中葉子節點的個數 求二叉樹的高度等等。binarytree.h pragma once templat...