經典二叉樹面試題

2021-08-04 04:46:04 字數 1540 閱讀 9965

包括建立銷毀二叉樹,層序遍歷二叉樹,求二叉樹的葉子節點,求二叉樹第 k層的節點個數,求二叉樹的高度等

#include 

#include

template

struct binarytreenode

};template

class binarytree

//建構函式

binarytree(const t* a, size_t size, const t& invalid)

//拷貝構造

binarytree(const binarytree& b)

//析構函式

~binarytree()

}//層序遍歷列印

void levelorder()

//求葉子節點的個數

size_t getleafsize()

//求第k層節點的個數

size_t getklevelsize(size_t k)

//求二叉樹的高度

size_t depth()

protected:

//按照先序遍歷遞迴建樹,index傳引用

node* creattree(const t* a, size_t size, const t& invalid, size_t& index)

return root;

}//使用佇列,層序遍歷列印樹的各個節點

void _levelorder(node* root)

while (!q.empty())

if (front->_right)}}

//拷貝

node* _copy(node* root)

return tmp;

}//遞迴釋放空間

void destroy(node* root)

}//求葉子節點

size_t _getleafsize(node* root)

else

}//求第k層節點個數

size_t _getklevelsize(node* root, size_t k)

return count;

}//求樹的深度

size_t _depth(node* root)

}private:

node* _root;

};void testbinarytree()

; size_t size = sizeof(arr) / sizeof(arr[0]);

binarytree bt(arr, size, '#');

binarytree b1(bt);

//bt.~binarytree();

bt.levelorder();

cout

<< bt.depth() << endl;;

cout

<< bt.getleafsize() << endl;

cout

<< bt.getklevelsize(2) << endl;

}

二叉樹經典面試題

以下二叉樹的結點型別如下 templatet struct binarytreenode 求二叉樹中兩個節點的最近公共祖先 分析 求兩個結點的最近公共祖先有兩種情況。1 如果這兩個結點不在一條線上,則它們就分別在最近的公共祖父的左右子樹上。2 如果這兩個結點在一條線上,則它們之中深度最前的就是他們的...

二叉樹經典面試題

二叉樹的結點型別如下 typedef struct btnode btnode,binarytree 1.給你一顆普通的二叉樹,求二叉樹中最遠的兩個節點的距離分析 1 如果具有最遠距離的兩個結點之間的路徑經過根結點,則最遠距離就是這個根節點左邊的深度加上根節點的右邊的深度。2 如果具有最遠距離的兩個...

二叉樹的經典面試題

二叉樹的基本操作 二叉樹的遍歷 前 中 後 層,遞迴 非遞迴 中用到的棧 中用到的佇列 面試題拷貝二叉樹 判斷一棵二叉樹是否是完全二叉樹 二叉樹的映象遞迴 二叉樹的映象非遞迴 求二叉樹中結點的個數 獲取二叉樹中葉子結點的個數 求二叉樹中k層結點的個數 求二叉樹的高度 查詢值為data的結點 判斷乙個...