本文为递归实现二叉树的各种操作。
二叉树的前序遍历:(根--左--右)
public static void PreOrder(TreeNode tree){
if(tree != null){
System.out.print(tree.val);
PreOrder(tree.left);
PreOrder(tree.right);
}
}
二叉树的中序遍历:(左--根--右)
public static void InOrder(TreeNode tree){
if(tree != null){
InOrder(tree.left);
System.out.print(tree.val);
InOrder(tree.right);
}
}
二叉树的后序遍历:(左--右--根)
public static void PostOrder(TreeNode tree){
if(tree != null){
PostOrder(tree.left);
PostOrder(tree.right);
System.out.print(tree.val);
}
}
二叉树层次遍历:(从上到下,从左到右)
思想:利用队列实现,在访问二叉树某一层节点时,把下一层的节点指针预先记忆在队列中,利用队列安排逐层访问的顺序。
public static void LevelOrder(TreeNode tree){
TreeNode p = null;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(tree);
while(!queue.isEmpty()){
p = queue.poll();
System.out.print(p.val);
if(p.left != null)
queue.add(p.left);
if(p.right != null)
queue.add(p.right);
}
}
求二叉树的高度:
思想:分别找出左右子树的高度,找出最大的+1。递归实现
public static int heigh(TreeNode tree){
if(tree == null)
return 0;
else
return 1 + Math.max(heigh(tree.left),heigh(tree.right));
}
求二叉树节点个数:
思想:分别计算左右子树的节点个数,相加后在+1.递归实现
public static int size(TreeNode tree){
if(tree == null)
return 0;
else
return 1 + size(tree.left) + size(tree.right);
}