二叉樹:
在電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。
二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2^個結點;深度為k的二叉樹至多有2^k-1個結點;對任何一棵二叉樹t,如果其終端結點數為n_0,度為2的結點數為n_2,則n_0=n_2+1。
一棵深度為k,且有2^k-1個節點稱之為滿二叉樹;深度為k,有n個節點的二叉樹,當且僅當其每乙個節點都與深度為k的滿二叉樹中,序號為1至n的節點對應時,稱之為完全二叉樹。
運用遞迴思想簡單實現一顆二叉樹,這裡得清楚二叉樹的儲存模式,以及重要的前序中序後序遞迴遍歷二叉樹
#define _crt_secure_no_warnings 1
#include
using
namespace
std;
template
struct bintreenode //節點定義
bintreenode* _left;
bintreenode* _right;
t _value;
};template
class bintree
bintree(const bintree&b) //拷貝構造
~bintree() //析構
bintreeoperator=(const bintree&b)
return *this;
}void _preorderprint() //前序遍歷
void _infixprint() //中序遍歷
void _postprint() //後序遍歷
size_t size()
size_t depth()
protected:
node* _creatbintree(t* a, size_t size, size_t& index, const t& invaild)
return newnode;
}node* _copy(node* root)
return newnode;
}node* _destory(node* root)
return root;
}void _preorder(node* root)
}void _infixorder(node* root)
}void _postorder(node* root)
}size_t _size(node* root)
return size;
}size_t _depth(node *root)
if (depth > maxdepth)
if (root->_right != null)
if (depth > maxdepth)
}return maxdepth;
}protected:
node* _root;
};int main()
; bintree b(a, 10, '#');
b._preorderprint();
b._infixprint();
b._postprint();
cout
<< b.size() << endl;
cout
<< b.depth() << endl;
system("pause");
return
0;}
資料結構 二叉樹練習 遞迴
以孩子兄弟鏈作為樹的儲存結構,編寫乙個求樹高度的遞迴演算法。遞迴模型 設f t 為樹t的高度 f t 0 若t null f t 1 若t沒有孩子節點 f t max f p 1 其他情況 p為t的孩子 int treeheight tsbnode t return max 1 二叉樹應用練習 假設...
遍歷二叉樹(資料結構,遞迴)
在二叉樹的應用中,常常要求在樹中查詢具有某種特徵的結點,或者對全部結點逐一進行某種處理。這就是二叉樹的遍歷問題。所謂二叉樹的遍歷是指按一定的規律和次序訪問樹中的各個結點,而且每個結點僅被訪問一次。訪問 的含義很廣,可以是對結點作各種處理,如輸出結點的資訊等。遍歷一般按照從左到右的順序,共有3種遍歷方...
資料結構 二叉樹遍歷非遞迴實現
資料結構中二叉樹的遍歷主要分為先序,中序和後序。順序是相對根節點來說的。先序中序非遞迴實現比較簡單,後序較為複雜些,需要判斷右子樹是否為空或遍歷完。以下為三種遍歷方法的非遞迴c實現 include include typedef struct binode binode,bitree typedef...