C 實現二叉樹

2021-07-07 06:06:15 字數 2346 閱讀 9930

實現**

#pragma once

#include#include #include using namespace std;

templatestruct bintreenode

};templateclass binarytree

binarytree(char *str)//根據先序字串行建立二叉樹

binarytree(binarytree&tree);

binarytree &operator=(binarytree&tree);

~binarytree()

{}public:

void preorder();//遞迴先序遍歷

void preorder_nonr();//非遞迴先序遍歷

void inorder();//遞迴中序遍歷

void inorder_nonr();//非遞迴中序遍歷

void postorder();//遞迴後序遍歷

void postorder_nonr();//非遞迴後序遍歷

void levelprint();//按層次列印

void treeprint();//按樹狀列印二叉樹

int size();//二叉樹結點個數

int depth();//二叉樹深度

private:

void _createbintree(bintreenode*& root, char *& str);

void _preorder(bintreenode*root);

void _inorder(bintreenode*root);

void _postorder(bintreenode*root);

void _levelprint(bintreenode*root);

int _size(bintreenode*root);

int _depth(bintreenode*root);

};templatevoid binarytree::_createbintree(bintreenode*& root, char *& str)

}//使用遞迴先序建立二叉樹

templatevoid binarytree::preorder()

}//使用遞迴中序建立二叉樹

templatevoid binarytree::inorder()

}//使用遞迴後序建立二叉樹

templatevoid binarytree::postorder()

}templatevoid binarytree::levelprint()

queue*> q;//借助乙個佇列實現層次列印

q.push(root);//將根結點先加入佇列中

while (!q.empty())//佇列不為空持續進行列印

if(front->_rchild != null)//有右節點則將右節點加入佇列中

}}templatevoid binarytree::preorder_nonr()

if(!stk.empty())

}coutcur = stk.top();

cout<_data<<" ";//取出棧頂元素進行訪問

stk.pop();

if(cur->_rchild)//存在右孩子則將右孩子入棧

}coutbintreenode*top = stk.top();

cur = top;

//若右孩子為空,或右子樹已經訪問過,則訪問根節點

if(cur->_rchild == null || cur->_rchild == visited)

else

} couttemplateint binarytree::_size(bintreenode*root)

//二叉樹最大深度

templateint binarytree::depth()

templateint binarytree::_depth(bintreenode*root)

測試**

#include "binarytree.hpp"

int main()

{ char *str = "124##5##36###";

binarytreebintree(str);

bintree.preorder();

bintree.inorder();

bintree.postorder();

bintree.levelprint();

cout<

C 實現二叉樹

其中的 linkstack.h 和 linkqueue 分別在 以下兩篇博文裡 linkstack linkqueue include include linkstack.h include linkqueue.h using namespace std 定義節點 templatestruct no...

二叉樹C 實現

最近整理原來的一些 腦子有點不好使,還是記下來吧。binary tree.h,遍歷包含了遞迴和非遞迴兩種,層次遍歷 ifndef binary tree h define binary tree h templatestruct binode templateclass bitree endif b...

C 二叉樹實現

二叉樹節點類 二叉樹結點類bintreenode宣告 templateclass bintreenode bintreenode getleft bintreenode getright t getdata void setleft bintreenode left void setright bi...