例题:计算二叉树的结点个数:
利用遍历的思想解决
利用汇总的思想解决 :根+左子树+右子树
例题:计算叶子结点个数:
1)遍历:遍历每个结点,如果是叶子 count++
void calcLeafCount(Node root)
2)汇总:
整棵树的叶子结点个数=left叶子个数+right叶子个数
例题:计算二叉树的高度:
1)汇总
int left 左子树的高度
int right 右子树的高度
int height=max(left,right)+1;
例题:计算二叉树第k层的结点个数:
用汇总求左子树k-1层结点+右子树k-1层结点
例题:查找结点,返回结点引用
Node search(Node root,int k) 没有找到返回null
首先:结点的值不重复,查找结果,返回该结点的引用
查找过程:
1、首先判断根的值是否是要找的值,是:直接返回根的值
2、去左子树里面找,如果左子树找到了,返回该引用
3、否则去右子树找
【注】:
1)如果没找到,怎么处理?
return null;
2)如何去左子树查找
sear(root.left,k);
3)如何判断有没有找到?
if(left!=null)//表示找到了
4)需要先判断左子树,没有的话再去右子树判断