鏈式儲存結構來表示二叉樹,每乙個二叉樹節點包含樹節點的值、樹的左孩子指標、樹的右孩子指標:
classbinode;
那麼對於乙個二叉樹來說,只需要存放指向樹根節點的指標即可,另外還需要宣告二叉樹的一些功能,比如遍歷方法、求樹高等(bitree.h):
#ifndef bitree_h_included#define bitree_h_included#include
#include
using
namespace
std;
class
binode;
class
bitree
///按照前序遍歷序列建立二叉樹
void createbitree(string
s);
///前序遍歷二叉樹
void
preorder();
///中序遍歷二叉樹
void
inorder();
///後序遍歷二叉樹(遞迴方法)
void
postorder();
///後序遍歷二叉樹(使用棧的非遞迴方法)
void
postorder1();
///層序遍歷二叉樹
void
levelorder();
///求樹的高度
intgetheight();
///求兩個節點的最大公共祖先
void ancestor(char a,char
b);};
#endif
//bitree_h_included
#include "bitree.h
"#include
"queue
"#include
"stack
"#include
"vector
"#include
using
namespace
std;
///遞迴建立二叉樹,如果是#表示空節點
binode * bitree::create(string &s,int &pos)
return
t; }
}///
按照前序遍歷序列建立二叉樹
void bitree::createbitree(string
s)///
前序遍歷二叉樹
void
bitree::preorder()
void bitree::pre_order(binode *t)
}///
中序遍歷二叉樹
void
bitree::inorder()
void bitree::in_order(binode *t)
}///
後序遍歷二叉樹(遞迴方法)
void
bitree::postorder()
void bitree::post_order(binode *t)
}///
後序遍歷二叉樹(使用棧的非遞迴方法)
///後續遍歷先遍歷左子樹,再遍歷右子樹,最後遍歷根節點
///對於乙個節點而言,先一直遍歷到最左節點
///然後用r記錄右子樹是否遍歷,如果沒有遍歷,則遍歷右子樹
void
bitree::postorder1()
else
///否則遍歷根節點
else}}
cout
<}///
使用佇列進行層序遍歷二叉樹
void
bitree::levelorder()
cout
<}///
求樹的高度
intbitree::getheight()
void bitree::get_height(binode *t,int
h)}
一般關於樹的程式設計題適合用遞迴的方法來求解
#include #include"bitree.h
"using
namespace
std;
intmain()
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 實現二叉樹
實現 pragma once include include include using namespace std templatestruct bintreenode templateclass binarytree binarytree char str 根據先序字串行建立二叉樹 binary...