這天氣都能惹上感冒+咳嗽,這幸運。
話說回來,複習資料結構,二叉樹算是第乙個要看的,比較簡單,又容易理解。實現方式有很多,大概如下:
順序儲存:這種適合於比較完全的二叉樹。子節點則為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...