二叉樹的建立
二叉樹的高度
二叉樹某層節點的個數
二叉樹的映象
二叉樹最遠兩個節點的距離
二叉樹的前中後層序遞迴非遞迴遍歷
判斷二叉樹是否是完全二叉樹
二叉樹葉子節點的個數
#include
#include
#include
using
namespace
std;
template
struct binarytreenode
};template
class binarytree
//建立二叉樹
binarytree(const t *arr, const size_t size, const t invalid)
void preorder()
void preorder_nor()
void postorder()
void postorder_nor()
~binarytree()
//判斷是否是完全二叉樹
bool iscompletebinarytree()
//獲取二叉樹的映象
void getbinarymirror()
//獲取二叉樹的高度
size_t height()
//得到二叉樹葉子節點的個數
size_t getleefnode()
//得到二叉樹第k層的節點數目
size_t getklevelnode(size_t k)
//得到二叉樹中距離最遠的兩個結點之間的距離
int getfarthestdistance()
private:
//index記得給引用
void _createtree(node *&proot, const t *arr, const size_t size, size_t &index, t invalid)
}void _preorder(node *proot)
}void _preorder_nor(node *proot)
node *ptop = st.top();
st.pop();
pcur = ptop->_pright;
}cout
<< endl;
}void _postorder(node *proot)
}void _postorder_nor(node *proot)
pcur = st.top();
if ((nullptr == pcur->_pright) || (pflag == pcur->_pright))
else
if (pcur->_pright)}}
void _destroytree(node *proot)}/*
1. 層序遍歷找到第乙個度不為2的節點,把flag設定為true
2. 若該節點只有左孩子沒有右孩子繼續遍歷,若繼續遍歷的節點度不為0返回false
3. 若該節點只有右孩子沒有左孩子返回false
4. 若棧為空返回true
*/bool _iscompletebinarytree(node *proot)
bool flag = false;
while (!q.empty())
return
true;
}//找到二叉樹中距離最遠的兩個節點
int _getfarthestdistance(node* proot, int& distance)
//得到二叉樹的映象
//層序或者前序後序遍歷節點交換左右孩子
void _getbinarymirror(node *proot)
if (ptop->_pleft)
q.push(ptop->_pleft);
if (ptop->_pright)
q.push(ptop->_pright);
q.pop();}}
size_t _height(node *proot)
size_t _getleefnode(node *proot)
size_t _getklevelnode(node *proot, size_t k)
private:
node *_proot;
};void test()
; char arr2 = ;
size_t sz = sizeof(arr) / sizeof(arr[0]);
binarytree b(arr, sz, '#');
size_t sz2 = sizeof(arr2) / sizeof(arr2[0]);
binarytree w(arr2, sz2, '#');
cout
<< b.getfarthestdistance() << endl;
b.preorder();
cout
<< "得到映象"
<< endl;
b.getbinarymirror();
b.preorder_nor();
b.postorder();
b.postorder_nor();
cout
<< w.getklevelnode(3) << endl;
cout
<< "b是否是完全二叉樹"
<< endl << b.iscompletebinarytree() << endl;
w.postorder_nor();
cout
<< "w的距離最大"
<< endl;
cout
<< w.getfarthestdistance() << endl;
cout
<< "樹的高度是:"
<< endl << b.height() << endl;
cout
<< "w是否是完全二叉樹"
<< endl << w.iscompletebinarytree() << endl;
system("pause");
}int main()
二叉樹面試題
1.求二叉樹節點個數 可以使用遞迴解決。將問題分解為求根節點 左子樹的節點數 右節點的節點數。實現 public size t size private size t size node root 2.求頁節點個數 頁節點 左右子樹都為空的節點被稱為頁節點,使用遞迴遍歷,當碰到乙個左右子樹為空的節點...
面試題 二叉樹
面試題 二叉樹 1.重建二叉樹 前序 中序 treenode reconstructbinarytree vector pre,vector vin treenode root new treenode pre 0 int pos 0 for pos pre left,vin left,pre ri...
二叉樹 面試題2
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。前序遍歷 dlr 中序遍歷 ldr 重建過程用遞迴演算法比較簡單 public static treenode reconstruc...