二叉樹的C 實現演算法

2022-07-10 02:30:12 字數 2143 閱讀 6032

鏈式儲存結構來表示二叉樹,每乙個二叉樹節點包含樹節點的值、樹的左孩子指標、樹的右孩子指標:

class

binode;

那麼對於乙個二叉樹來說,只需要存放指向樹根節點的指標即可,另外還需要宣告二叉樹的一些功能,比如遍歷方法、求樹高等(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...