二叉樹的一些基本操作都是通過遞迴來實現的
在用遞迴解決二叉樹的問題時要善於二叉樹劃分為根節點左子樹和右子樹。
二叉樹遞迴建立的具體函式呼叫過程
二叉樹的遞迴實現的基本操作
#include
#include
#include
using
namespace
std;
template
struct binarytreenode
binarytreenode* lchild;
binarytreenode* rchild;
t value;
};template
class binarytree
//一顆空樹
binarytree( t*a , int size, int invalid )
binarytree( const binarytree &t)
binarytree& operator=(const binarytree& t)
~binarytree()
void prevorder()
void inorder()
void postorder()
void levelorder()
size_t size()
size_t _size(node *root)
else
}size_t leafsize()
size_t _leafsize(node *root)
if (root ->lchild == null&& root->rchild == null)
else
}size_t getklevel(size_t k)
size_t depth()
node* find(const t& x)
protected:
node* _copy(node *root) //拷貝構造
return tmp;
}binarytree&_assign(node *root) //賦值運算子
node* tmp = null ;
if (root != null)
_root = tmp;
return *this ;
}node* _creatbinarytree(const t*a, int size, int invalid, int & index)
return root;
}void _delete(node *root)
}void _prevorder(node *root)
}void _inorder(node *root)
}void _postorder(node *root)
}void _levelorder(node *root)
while (!q.empty())
if (tmp->rchild)
}} //利用了佇列先進先出的特點進行了廣度優先遍歷
size_t _getklevel(node *root, size_t k )
if (k == 1)
return _getklevel(root ->lchild, k - 1) + _getklevel(root->rchild, k - 1);
}size_t _depth(node *root) //思想比較左右字數的大小,左子樹比右子樹大則返回左子樹的大小+1
size_t left = _depth(root ->lchild);
size_t right = _depth(root ->rchild);
return left > right ? left + 1 : right + 1;
}node* _find(node *root, const t &x)
if (root ->value == x)
node*ret = _find(root ->lchild, x);
if (ret != null )
return _find(root ->rchild, x);
}protected:
node* _root;
};void funtest()
; int array2[10] = ;
binarytree t1(array1, sizeof(array1) / sizeof(array1[0]), '#' );
binarytree t2(array2, sizeof(array2) / sizeof(array2[0]), '#' );
t1.prevorder();
t2.prevorder();
t2 = t1;
t2.prevorder();
t2.levelorder();
cout
<< t2.size()
<< t2.leafsize() << endl;
cout
<< t2.find(4)
<< "depth:"
<< t2.depth()<< endl;
cout
<< "getklevel:"
<< t2.getklevel(2)
二叉樹基本操作
tree.h ifndef tree h define tree h include typedef int element 定義二叉樹 typedef struct nodetreenode void preorder treenode root 遞迴前序遍歷 void inorder treen...
二叉樹基本操作
一.二叉樹的定義 二.二叉樹的建立 定義一棵無資料的二叉樹 6 int left size 7 int right size 為了操作簡便,我們定義一棵不需要儲存資料的二叉樹,只要能儲存節點之間的邏輯關係就行,所以用兩個陣列來表示。left i 第i個節點的左子節點的序號 right i 第i個節點...
二叉樹基本操作
include include define maxsize 100 typedef char elemtype typedef struct node btnode void createbtnode btnode b,char str 由str串建立二叉鏈 j ch str j btnode f...