遞迴實現二叉樹

2021-08-07 05:51:54 字數 3188 閱讀 7993

二叉樹是一種非線性結構,用途廣泛。二叉樹的每個結點的度都不大於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...