最近发现二叉树貌似很受面试官青睐,明天要参加某大型互联网公司二面,来总结总结热热身的说。二叉树顾名思义每个节点最多有两个孩子节点,由于二叉树的建立本身就是一个递归的过程,所以很多二叉树相关问题都可以使用递归的方法进行求解,但是也有很多面试官喜欢问×××的非递归实现。下面对一些常见的二叉树问题进行总结,原帖使用C,本小博用Java改写了一下。原文地址:http://blog.csdn.net/luckyxiaoqiang/article/details/7518888。
建立自己的二叉树结构
class BinaryTree {
int data;
BinaryTree left;
BinaryTree right;
public BinaryTree(int data) {
this.data = data;
}
}
一
、求二叉树节点个数
//二叉树节点的个数(递归)
//(1)如果二叉树为空,节点个数为0
//(2)如果二叉树不为空,二叉树节点个数 = 左子树节点个数 + 右子树节点个数 + 1
int GetNodeNum(BinaryTree root) {
if(root == null) {
return 0;
}
return GetNodeNum(root.left) + GetNodeNum(root.right) + 1;
}
二、求二叉树深度
//二叉树深度(递归)
//(1)如果二叉树为空,二叉树的深度为0
//(2)如果二叉树不为空,二叉树的深度 = max(左子树深度, 右子树深度) + 1
int GetDepth(BinaryTree root) {
if(root == null) {
return 0;
}
return Math.max(GetDepth(