簡單二叉樹

2021-09-10 21:49:02 字數 1748 閱讀 5322

// algorithm.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include

#define d_left 0

#define d_right 1

template

struct bnode

bnode* plnode; // 左子樹

bnode* prnode; // 右子樹

t* pvalue; // 值

};template

class btree

void insert(t* pvalue)

int iinsertflag = 0; // 插入方向,左還是右

bnode* pparent = null;

bnode* ptem = root;

while(ptem)

else

}if(pparent)}}

// 先訪問 根->左->右

// 前序遍歷

void dlr(bnode* root,std::function_callback)

_callback(root->pvalue);

if(root->plnode != null)

dlr(root->plnode,_callback);

if(root->prnode != null)

dlr(root->prnode,_callback);

}// 先訪問 左->根->右

// 中序遍歷

void ldr(bnode* root, std::function_callback)

if(root->plnode != null)

ldr(root->plnode, _callback);

_callback(root->pvalue);

if(root->prnode != null)

ldr(root->prnode, _callback);

}// 先訪問 左->右->根

// 後序遍歷

void lrd(bnode* root, std::function_callback)

if(root->plnode != null)

lrd(root->plnode, _callback);

if(root->prnode != null)

lrd(root->prnode, _callback);

_callback(root->pvalue);

}public:

bnode* root;

};int main()

;btree.insert(&a[0]);

btree.insert(&a[1]);

btree.insert(&a[2]);

btree.insert(&a[3]);

btree.insert(&a[4]);

// 列印前序遍歷

printf("前序遍歷:\n");

btree.dlr(btree.root, (int* a)

);printf("\n\n中序遍歷:\n");

// 列印中序遍歷

btree.ldr(btree.root, (int* a)

);printf("\n\n後續遍歷:\n");

// 列印中序遍歷

btree.lrd(btree.root, (int* a)

);getchar();

return 0;

}

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...

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

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