11.求二叉树第K层的节点个数
13. 由前序遍历序列和中序遍历序列重建二叉树
14. 求二叉树中两个节点的最低公共祖先节点
15. 求二叉树中节点的最大距离
16.二叉树的非递归实现
17.二叉查找树
11.将二叉查找树变为有序的双向链表
18.伸展树
19.B树
【11】求二叉树第K层节点个数
递归解法:
(1)如果二叉树为空或者k<1返回0
(2)如果二叉树不为空并且k==1,返回1
(3)如果二叉树不为空且k>1,返回左子树中k-1层的节点个数与右子树k-1层节点个数之和
<span style="font-size:12px;color:#333333;">/*************求二叉树第k层的节点个数**************/
int GetNodeNumKthLevel(BiTreeNode* &T,int k)
{
if(k == 0 || T == NULL)return 0;
if(k == 1) return 1;
int numleft = GetNodeNumKthLevel(T->lchild,k-1);//左子树中K-1层的节点个数
int numright = GetNodeNumKthLevel(T->rchild,k-1);//左子树中K-1层的节点个数
return(numleft + numright);
}</span>
[15]节点的最大距离
递归解法:
1.根节点高度为0,每经过一个节点,树的高度加1,递归遍历,返回左右子树中的最大值
2.每次遍历更新节点间的最大距离
int tree_hight(BiTreeNode* pRoot,int& maxLen)
{
if(pRoot == NULL) return -1;
int pLeftLen = tree_hight(pRoot->pLeft,maxLen) +1;
int pRightLen= tree_hight(pRoot->pRight,maxLen) +1;
maxLen = max(pLeftLen + pRightLen,maxLen);
return pLeftLen > pRightLen ? pLeftLen : pRightLen;
}