二叉树的创建以及遍历,统计二叉树的叶子节点,全部节点,代码完整实现以及注释
/**
* 二叉树的创建以及遍历,统计二叉树的叶子节点
*/
//定义二叉树,构建节点,初始化节点
class TreeNode{
int val;
TreeNode left,right;
public TreeNode(int item){
val=item;
left=right = null;
}
}
//创建二叉树并初始化二叉树
class BinaryTree{
//tree of root
TreeNode root;
BinaryTree(){
root =null;
}
}
public class Main {
public static void main(String[] args) {
//create an object of tree
BinaryTree tree = new BinaryTree();
//create nodes of tree
tree.root = new TreeNode(1);
tree.root.left = new TreeNode(2);
tree.root.right = new TreeNode(3);
//create nodes of tree.right
tree.root.left.left = new TreeNode(4);
//create nodes of tree.left
tree.root.right.right = new TreeNode(5);
//创建类对象
Main mytree=new Main();
//调用方法
int totalleaf = mytree.countTotalLeafNodeNum(tree.root);
System.out.println("total leaf nodes:" + totalleaf);
System.out.println("total nodes: "+ mytree.countTotalNodeNum(tree.root));
//遍历二叉树
System.out.println("前序遍历:"); //12435
mytree.preOrder(tree.root);
System.out.println("中序遍历:");//42135
mytree.inOrder(tree.root);
System.out.println("后序遍历:");//42531
mytree.lastOrder(tree.root);
}
/**
* count leaf nodes
* @param root
* @return
*/
public int countTotalLeafNodeNum(TreeNode root){
//空树
if(root == null){
return 0;
}
//只有根节点
if(root.left == null || root.right ==null){
return 1;
}else{
return countTotalLeafNodeNum(root.left) + countTotalLeafNodeNum(root.right);
}
}
/**
* count total nodes
* @param root
* @return
*/
public int countTotalNodeNum(TreeNode root){
//空树
if(root == null){
return 0;
}
return 1 + countTotalNodeNum(root.left) + countTotalNodeNum(root.right);
}
/**
* 二叉树的遍历
*/
//前序遍历
public void preOrder(TreeNode root){
if(root == null) return;
System.out.println(root.val);
preOrder(root.left);
preOrder(root.right);
}
//中序遍历
public void inOrder(TreeNode root){
if(root == null) return;
inOrder(root.left);
System.out.println(root.val);
inOrder(root.right);
}
//后序遍历
public void lastOrder(TreeNode root){
if(root == null) return;
lastOrder(root.left);
lastOrder(root.right);
System.out.println(root.val);
}
}
网友评论