【数据结构】:二叉树的遍历(递归)

二叉树的遍历(递归)

二叉树的遍历:是指沿着某条搜索路线,依次对树中每个节点做一次且仅做一次访问。

N:代表根结点

L:代表根结点的左子树

R:代表根结点的右子树

NLR:先序遍历,又称作前序遍历,访问顺序为:根结点-->根的左子树-->根的右子树

LNR:中序遍历,访问顺序为:根的左子树-->根结点-->根的右子树

LRN:后序遍历,访问顺序为:根的左子树-->根的右子树-->根结点

1、二叉树的先序遍历

//先序遍历
public static void postOrder(TreeNode root){
        if (root==null){
            return;
        }
        // 递归遍历左子树
        preOrder(root.left);
​
        // 递归遍历右子树
        preOrder(root.right);
​
        // 访问根节点. 此处的访问就是打印操作
        System.out.print(root.val);
    }

2、二叉树的中序遍历

//中序遍历
public static void inOrder(TreeNode root){
    if (root==null){
        return;
    }
    // 递归遍历左子树
    preOrder(root.left);
​
    // 访问根节点. 此处的访问就是打印操作
    System.out.print(root.val);
​
    // 递归遍历右子树
    preOrder(root.right);
}

3、二叉树的后序遍历

//后序遍历
public static void postOrder(TreeNode root){
    if (root==null){
        return;
    }
    // 递归遍历左子树
    preOrder(root.left);
​
    // 递归遍历右子树
    preOrder(root.right);
​
    // 访问根节点. 此处的访问就是打印操作
    System.out.print(root.val);
}

完整代码:

package java_03_23;
​
public class TreeNode {
    char val;
    TreeNode left;
    TreeNode right;
​
    public TreeNode(char val) {
        this.val=val;
    }
}
​
package java_03_23;
​
public class Tree {
    public static TreeNode buildTree() {
        // 先构造结点
        TreeNode a = new TreeNode('A');
        TreeNode b = new TreeNode('B');
        TreeNode c = new TreeNode('C');
        TreeNode d = new TreeNode('D');
        TreeNode e = new TreeNode('E');
        TreeNode f = new TreeNode('F');
        TreeNode g = new TreeNode('G');
        TreeNode h = new TreeNode('H');
        TreeNode i = new TreeNode('I');
        TreeNode j = new TreeNode('J');
​
​
        a.left = b;
        a.right = c;
​
        b.left = d;
        b.right = null;
​
        c.left = e;
        c.right = f;
​
        d.left = g;
        d.right = h;
​
        e.left = null;
        e.right = i;
​
        f.left = null;
        f.right = null;
​
        g.left = null;
        g.right = null;
​
        h.left = null;
        h.right = null;
​
        i.left = null;
        i.right = null;
​
        return a;
}
    //二叉树的遍历
    // 先序遍历
    public static void preOrder(TreeNode root) {
        if (root == null) {
            return;
        }
        // 访问根节点. 此处的访问就是打印操作
        System.out.print(root.val);
​
        // 递归遍历左子树
        preOrder(root.left);
​
        // 递归遍历右子树
        preOrder(root.right);
    }
​
    //中序遍历
    public static void inOrder(TreeNode root){
        if (root==null){
            return;
        }
        // 递归遍历左子树
        preOrder(root.left);
​
        // 访问根节点. 此处的访问就是打印操作
        System.out.print(root.val);
​
        // 递归遍历右子树
        preOrder(root.right);
    }
​
    public static void postOrder(TreeNode root){
        if (root==null){
            return;
        }
        // 递归遍历左子树
        preOrder(root.left);
​
        // 递归遍历右子树
        preOrder(root.right);
​
        // 访问根节点. 此处的访问就是打印操作
        System.out.print(root.val);
    }
    public static void main(String[] args) {
        TreeNode root=buildTree();
        System.out.println("先序遍历结果:");
        preOrder(root);
        System.out.println();
        System.out.println("中序遍历结果:");
        inOrder(root);
        System.out.println();
        System.out.println("后序遍历结果:");
        postOrder(root);
    }
}
​

结果:

猜你喜欢

转载自blog.csdn.net/qq_44292334/article/details/115273923