包括建立銷毀二叉樹,層序遍歷二叉樹,求二叉樹的葉子節點,求二叉樹第 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的結點 判斷乙個...