二叉树的创建以及遍历,统计二叉树的叶子节点,全部节点

2021-01-08  本文已影响0人  历十九喵喵喵

二叉树的创建以及遍历,统计二叉树的叶子节点,全部节点,代码完整实现以及注释

/**
 * 二叉树的创建以及遍历,统计二叉树的叶子节点
 */

//定义二叉树,构建节点,初始化节点
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);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读