递归--二叉树遍历,求深度,求二叉树节点个数

来源:互联网 发布:淘宝店铺首页1200 编辑:程序博客网 时间:2024/05/29 16:16

本文为递归实现二叉树的各种操作。

二叉树的前序遍历:(根--左--右)

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;elsereturn 1 + Math.max(heigh(tree.left),heigh(tree.right));} 
求二叉树节点个数:

思想:分别计算左右子树的节点个数,相加后在+1.递归实现

public static int size(TreeNode tree){if(tree == null)return 0;elsereturn 1 + size(tree.left) + size(tree.right);}
阅读全文
1 0