欢迎访问宙启技术站
智能推送

如何使用Java函数实现树的遍历

发布时间:2023-06-26 18:04:40

在Java中,树可以通过递归来遍历,可以使用以下三种遍历方式:前序遍历,中序遍历和后序遍历。

一、前序遍历

前序遍历顺序为 根节点 -> 左子树 -> 右子树。

示例代码

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

public class PreorderTraversal {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        preorder(root, list);
        return list;
    }
    
    public void preorder(TreeNode root, List<Integer> list) {
        if(root != null) {
            list.add(root.val);
            preorder(root.left, list);
            preorder(root.right, list);
        }
    }
}

二、中序遍历

中序遍历顺序为 左子树 -> 根节点 -> 右子树。

示例代码

public class InorderTraversal {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        inorder(root, list);
        return list;
    }
    
    public void inorder(TreeNode root, List<Integer> list) {
        if(root != null) {
            inorder(root.left, list);
            list.add(root.val);
            inorder(root.right, list);
        } 
    }
}

三、后序遍历

后序遍历顺序为 左子树 -> 右子树 -> 根节点。

示例代码

public class PostorderTraversal {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        postorder(root, list);
        return list;
    }
    
    public void postorder(TreeNode root, List<Integer> list) {
        if(root != null) {
            postorder(root.left, list);
            postorder(root.right, list);
            list.add(root.val);
        } 
    }
}

需要注意的是,在使用递归遍历树时,需要考虑空节点的情况,以避免空指针异常。同时,为了更好地打印结果,我们可以把结果存储在List中返回。