二叉樹實現類 三叉鍊錶實現

2021-06-05 07:19:41 字數 2156 閱讀 4629

這天氣都能惹上感冒+咳嗽,這幸運。

話說回來,複習資料結構,二叉樹算是第乙個要看的,比較簡單,又容易理解。實現方式有很多,大概如下:

順序儲存:這種適合於比較完全的二叉樹。子節點則為2i + 1和2i + 2,父節點則為floor((i - 1)/ 2)。

二叉鍊錶:也就是鍊錶實現,三個屬性,值,左子節點指標,右子節點指標。這個空間算是節約,不過找父節點不好找。

三叉鍊錶:相對於二叉鍊錶,多了父親節點指標。可以更好的實現節點的訪問,不過演算法相對也會複雜點。

其實還有其它變形,就不先說。樹的遍歷可以分為深搜和廣搜。深搜就是常見的前序、中序、後序。廣搜則是需要借住佇列的實現。每訪問乙個節點則把其子節點都扔進佇列尾。

廢話不多說,三叉鍊錶實現的二叉樹類**如下:

#include using namespace std;

enum statue

;//二叉樹的三叉鍊錶節點結構

template class binarynode

;template binarynode::binarynode()

//二叉樹類,三叉鍊錶實現

template class binarytree

;template binarytree::binarytree()

template binarytree::binarytree(binarynode*root)

template void binarytree::destroytree()

template binarytree::~binarytree()

template statue binarytree::isempty()

template int binarytree::getdepth(binarynode*node)

int ldepth, rdepth;

ldepth = getdepth(node->lchild);

rdepth = getdepth(node->rchild);

return (ldepth > rdepth) ? ldepth + 1 : rdepth + 1;

}template void binarytree::creatbinarytree(binarynode*node)

root = new binarynode;

root->value = node->value;

insertchild(root, root->lchild, node->lchild);

insertchild(root, root->rchild, node->rchild);

}template statue binarytree::insertchild(binarynode*nodeparent, binarynode*node, binarynode*child)

node = new binarynode;

node->parent = nodeparent;

result = insertchild(node, node->lchild, child->lchild);

if (insert_error == result)

result = insertchild(node, node->rchild, child->rchild);

return result;

}template void binarytree::deletetree(binarynode*node)

deletetree(node->lchild);

deletetree(node->rchild);

free(node);

node = null;

}template binarynode* binarytree::findfrom(binarynode*from, nodetype value)

if (from->value == value)

binarynode* findresult;

findresult = findfrom(from->lchild, value);

if (null == findresult)

return findresult;

}template binarynode* binarytree::find(nodetype value)

二叉樹的儲存結構 二叉鍊錶 三叉鍊錶

p ds 126 1 順序儲存結構 12 3 4 5 6 7 一般二叉樹 12345 0000 67 在最壞的情況下,乙個深度為k且只有k個結點的單支樹 樹中不存在度為2的結點 卻需要長度為2 k 1的一維陣列。2 鏈式儲存結構 二叉樹的儲存結構 一步乙個腳印,堅持 二叉樹的二叉鍊錶表示示意圖 找結...

二叉樹(二叉鍊錶實現)

二叉鍊錶結構的二叉樹模型,棧用自己寫的模版,佇列就不了 直接用stl的,不然 太長了 檔案 tree.h include include includeusing namespace std templateclass my stack templateclass node 結點類 node t d...

二叉鍊錶實現二叉樹

二叉樹的遍歷 前序遍歷,中序遍歷,後序遍歷,層序遍歷 二叉鍊錶的儲存實現 1 定義結構體,儲存二叉樹的結點資料,該結點的左兒子,右兒子。2 每乙個函式都要有乙個對應的私有成員 includeusing namespace std templatestruct binode templateclass...