二叉樹:二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作「左子樹」(left subtree)和「右子樹」
}//前序遍歷
void prevorder()
//中序遍歷
void midorder()
//後序遍歷
void postorder()
//個數
size_t size()
//深度
size_t depth()
//葉節點個數
size_t leafsize()
//層次遍歷
//利用佇列
void levelorder()
//前序非遞迴
void prevorderno_r()
//中序非遞迴
void midorderno_r()
//後序非遞迴
void postorder_nor()
node * find(const t& x )
//找第k層結點個數
size_t getklevel(int k)
protected :
size_t _getklevel(node * root, int k )
node * _find(node * root, const t & x)
node * ret = _find(root ->_left, x);
if (ret)
return ret;
return _find(root ->_right, x);
}void _postorder_nor(node * root)
node * top = s.top();
if (top->_right == null || top->_right == prev)
else
}cout << endl;
}/*void _midorderno_r(node* root)
if (!s.empty())
}}*/
void _midorderno_r(node * root)
node * top = s.top();
cout << top->_data << " " ;
s.pop();
cur = top->_right;}}
void _prevorderno_r(node * root)
}node * _copy(node * root)
node * newroot = new node( root ->_data);
newroot->_left = _copy( root ->_left);
newroot->_right = _copy( root ->_right);
return newroot;
}void _destroy(node * root)
_destroy( root ->_left);
_destroy( root ->_right);
}void _levelorder(node * root)
q.push( root );
while (!q.empty())
if (q.front()->_right != null )
cout << q.front()->_data << " " ;
q.pop();}}
size_t _leafsize(node * root)
size_t _depth(node * root)
size_t _size(node * root)
void _postorder(node * root)
void _midorder(node * root)
void _prevorder(node * root)
//size_t& index 記得傳引用,不然遞迴回來後index值又會變
node * _creattree(const t* a, size_t size , size_t & index, const t invalid )
return root;
}protected :
//binarytreenode* _root;
node * _root;
};void test()
; int array2[15] = ;
binarytree t1(array1, 10, '#' );
binarytree t2(array2, 15, '#');
//cout << "t1.size" << t1.size() << endl;
//cout << "t2.size" << t2.size() << endl;
//cout << "t1.depth" << t1.depth() << endl;
//cout << "t2.depth" << t2.depth() << endl;
//cout << "t1.leafsize: " << t1.leafsize() << endl;
//cout << "t2.leafsize: " << t2.leafsize() << endl;
/*binarytreet3(t1);
t3.prevorder();*/
/*binarytreet4;
t4 = t1;
t4.prevorder();*/
/*t1.prevorderno_r();
t2.prevorderno_r();*/
/*t1.midorderno_r();
t1.postorder_nor();*/
//cout << "find:6:" << t1.find(6)->_data << endl;
//cout << "find:2:" << t1.find(2)->_data << endl;
//cout << "find:10:" << t1.find(10) << endl;
cout << t1.getklevel(1) << endl;
cout << t1.getklevel(2) << endl;
cout << t1.getklevel(3) << endl;
}
資料結構 二叉樹 反轉二叉樹
include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...
《資料結構》 二叉樹
二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...
資料結構 二叉樹
1.二叉樹 二叉樹是一種特殊結構的樹,每個節點中最多有兩個子節點,如圖1所示 圖1 二叉樹 在圖1中的二叉樹裡,a c有兩個子節點,b d有乙個子節點。對於二叉樹還有圖2中的以下情況 圖2 二叉樹的特殊情況 在博文中還介紹了滿二叉樹和完全二叉樹還有其他的特殊二叉樹。2.二叉樹的實現 有兩種實現方式,...