算法练习——实现二叉树前序、中序和后序遍历

实现二叉树前序、中序和后序遍历:

目录

  • 实现二叉树前序、中序和后序遍历:
    • 题目:
    • 示例:
    • 分析:
    • 代码:


题目:

实现二叉树前序、中序和后序遍历
提示:使用递归实现


示例:

示例:

输入:
/*     1
     2   3
    4   5 6
*/
前序输出:1 2 4 3 5 6
中序输出:4 2 1 5 3 6
后序输出:4 2 5 6 3 1

分析:

这道题其实不完全算是算法,其实就是二叉树的三种遍历方法:
前序遍历:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。(根----->左------->右
中序遍历:若二叉树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后访问根结点,最后遍历右子树。(左----->根------->右
后序遍历:若二叉树为空,则空操作返回,否则从左到右先叶子结点后结点的方式遍历访问左右子树,最后访问根结点。(左------>右------>根
所以,这道题只是练习如何使用代码来实现前中后序遍历。

这里,先简单把二叉树建立出来:

public class TreeNode {
    int val;//节点值
    TreeNode left;//左子树地址
    TreeNode right;//右子树地址
    TreeNode( int x){
        val = x;//节点存放的数值
    }
}

建立与示例一样的树:

/*     1
     2   3
    4   5 6
*/
TreeNode treeNode = new TreeNode(1);
treeNode.left = new TreeNode(2);
treeNode.left.left = new TreeNode(4);
treeNode.right = new TreeNode(3);
treeNode.right.left = new TreeNode(5);
treeNode.right.right = new TreeNode(6);

然后就是将二叉树进行遍历,记住前中后序遍历的要求即可(高亮标出来了)


代码:

先看上面的分析!自己理解思考一下,不要急着看代码!

前序遍历:

	/**
     * 二叉树前序遍历   根-> 左-> 右
     * @param node    二叉树节点
     */
    public void preOrderTraversal(TreeNode node) {
        if (node == null){
            return;
        }

        System.out.print(node.val + " ");//根输出
        preOrderTraversal(node.left);//左子树
        preOrderTraversal(node.right);//右子树
    }

中序遍历:

	/**
     * 二叉树中序遍历   左-> 根-> 右
     * @param node   二叉树节点
     */
    public void inOrderTraveral(TreeNode node){
        if(node == null){
            return;
        }
        inOrderTraveral(node.left);//左子树
        System.out.print(node.val + " ");//根输出
        inOrderTraveral(node.right);//右子树
    }

后序遍历:

	/**
     * 二叉树后序遍历   左-> 右-> 根
     * @param node    二叉树节点
     */
    public void postOrderTraveral(TreeNode node){
        if(node == null){
            return;
        }
        postOrderTraveral(node.left);
        postOrderTraveral(node.right);
        System.out.print(node.val + " ");
    }

你可能感兴趣的:(JAVA算法,算法练习,二叉树,算法,leetcode,数据结构,java)