二叉樹的面試題總結

2021-08-02 08:39:25 字數 3083 閱讀 1705

二叉樹的建立

二叉樹的高度

二叉樹某層節點的個數

二叉樹的映象

二叉樹最遠兩個節點的距離

二叉樹的前中後層序遞迴非遞迴遍歷

判斷二叉樹是否是完全二叉樹

二叉樹葉子節點的個數

#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...