二叉树的基础操作

本文详细介绍了二叉树的前序、中序、后序遍历算法,以及如何求解二叉树的节点数量、叶子节点数量、特定层级节点数量,并提供了查找树中特定元素的方法。所有算法均用Java代码实现,包括使用静态变量和非静态变量两种方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、前序遍历:

public static void preOrder(Node root) {
        if (root==null) {
            return;
        }
        System.out.println(root.val + " ");
        preOrder(root.left);
        preOrder(root.right);
    }

2、中序遍历

 public static void inOrder(Node root) {
        if (root==null) {
            return;
        }
        inOrder(root.left);
        System.out.println(root.val + " ");
        inOrder(root.right);
    }

3、后序遍历

public static void postOrder(Node root) {
        if (root == null) {
            return;
        }
        postOrder(root.left);
        postOrder(root.right);
        System.out.println(root.val+ " ");
    }

4、求一棵树中的结点个数

(1)、使用静态变量

public static int size = 0;
    public static void size(Node root) {
        if (root==null) {
            return;
        }
        size++;
        size(root.left);
        size(root.right);
    }

(2)、不使用静态变量

public static int size2(Node root) {
        if (root==null) {
            return 0;
        }
        return 1 + size2(root.left) + size2(root.right);
    }

5、求叶子结点个数

(1)、使用静态变量

public static int leafSize = 0;
    public static void leafSize(Node root) {
        if (root==null) {
            return;
        }
        if (root.right==null&&root.left==null) {
            leafSize++;
        }
        leafSize(root.left);
        leafSize(root.right);
    }

(2)、不使用静态变量

public static int leafSize2(Node root) {
        if (root==null) {
            return 0;
        }
        return leafSize2(root.left) + leafSize2(root.right);
    }

6、求第k层结点个数

public static int kLevelSize(Node root, int k) {
        if (k<1||root==null) {
            return 0;
        }
        if (k==1) {
            return 1;
        }
        return kLevelSize(root.left,k-1) + kLevelSize(root.right,k-1);
    }

7、树种是否包含某个元素

(1)、使用静态变量

public static Node result = null;
    public static void find(Node root, char toFind) {
        if (root==null) {
            return;
        }
        if (root.val==toFind) {
            result = root;
            return;
        }
        find(root.left,toFind);
        find(root.right,toFind);
    }

(2)、不使用静态变量

public static Node find2(Node root, char toFind) {
        if (root==null) {
            return null;
        }
        if (root.val==toFind) {
            return root;
        }
        Node result = find2(root.left,toFind);
        if (result!=null) {
            return result;
        }
        return find2(root.right,toFind);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值