美文网首页
二叉树遍历

二叉树遍历

作者: syimo | 来源:发表于2016-11-12 18:26 被阅读0次

问题:根据先序遍历和中序遍历,求解后序遍历

思路:

  • 第一步,将先序和中序字符串进行划分。
    先序:1--247--3568中序:472--1--5386,由此可见,数字247属于左边的树结点,数字3568属于右边的树结点,1属于根结点
  • 第二步,根据第一步的规律,进行递归赋值。顶点作为根结点。分别设置其左右结点,如果没有则为Null。
  • PS:substring方法传入的第一个参数不能大于字符串长度或者为负数。并且当参数相同时,返回的字符串长度为0。
二叉树.png

代码实现:


public class N06 {

    public static void main(String[] args) {
        String preOrder = "12473568";
        String inOrder = "47215386";
        BinaryTree binaryTree = new BinaryTree(preOrder, inOrder);
        TreeNode root = binaryTree.root;
        
        System.out.println("pre order: ");
        binaryTree.preTreeTraverse(root);
        System.out.println();
        
        System.out.println("in order: ");
        binaryTree.inTreeTraverse(root);
        System.out.println();
        
        System.out.println("post order: ");
        binaryTree.postTreeTreverse(root);
        System.out.println();
    }

}

class BinaryTree {
    TreeNode root;

    public BinaryTree(String preOrder, String inOrder) {
        if (preOrder.length() == 0)
            return;
        char key = preOrder.charAt(0);
        int index = inOrder.indexOf(key);
        root = new TreeNode(key);

        this.root.setLeftNode(new BinaryTree(preOrder.substring(1, index + 1), inOrder.substring(0, index)).root);
        this.root.setRightNode(new BinaryTree(preOrder.substring(index + 1),inOrder.substring(index+1)).root);

    }

    public void preTreeTraverse(TreeNode root) {
        //先序遍历
        if (root != null) {
            System.out.print(root.data+"  ");
            preTreeTraverse(root.leftNode);
            preTreeTraverse(root.rightNode);

        }
    }

    public void inTreeTraverse(TreeNode root) {
        //中序遍历
        if (root != null) {
            inTreeTraverse(root.leftNode);
            System.out.print(root.data+"  ");
            inTreeTraverse(root.rightNode);
        }
    }

    public void postTreeTreverse(TreeNode root) {
        //后序遍历
        if (root != null) {
            postTreeTreverse(root.leftNode);
            postTreeTreverse(root.rightNode);
            System.out.print(root.getData()+"  ");
        }
        
    }
}

class TreeNode {
    char data;
    TreeNode leftNode;
    TreeNode rightNode;

    public TreeNode(char data) {
        this.data = data;
    }

    public char getData() {
        return data;
    }

    public void setData(char data) {
        this.data = data;
    }

    public TreeNode getLeftNode() {
        return leftNode;
    }

    public void setLeftNode(TreeNode leftNode) {
        this.leftNode = leftNode;
    }

    public TreeNode getRightNode() {
        return rightNode;
    }

    public void setRightNode(TreeNode rightNode) {
        this.rightNode = rightNode;
    }
}

参考

根据先序遍历与中序遍历构建二叉树

相关文章

  • 二叉树 基础操作

    二叉树的使用 二叉树结构 先序创建二叉树 DFS 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 BFS 层次遍历...

  • 关于二叉树的算法题

    前序遍历中序遍历后序遍历判断是否是平衡二叉树判断是否是对称二叉树判断二叉树高度按照层遍历二叉树判断二叉树宽度

  • 二叉树遍历

    二叉树 二叉树的存储结构 前序遍历 中序遍历 后序遍历 遍历代码 反转二叉树 深入学习二叉树 二叉树-你必须要懂!...

  • 二叉树操作

    树节点 逐行顺序解析二叉树 前序遍历二叉树 中序遍历二叉树 后序遍历二叉树 删除指定数值的节点 前序遍历顺序存储的...

  • 数据结构与算法之二叉树遍历(七)

    目录 前序遍历中序遍历后序遍历层序遍历遍历方式的选择条件根据遍历结果重构二叉树翻转二叉树计算二叉树的高度判断一棵树...

  • 二叉树三种遍历Swift代码实现

    二叉树的三种遍历 二叉树 前序遍历 中序遍历 后序遍历 另外 不得不说,得到二叉树的前序遍历和中序遍历的结果或者后...

  • 二叉树的遍历

    二叉树的遍历 二叉树遍历 分为前序遍历、中序遍历和后序遍历。 前序遍历 (DLR) 先访问根节点,然后前序遍历左子...

  • 前端二叉树

    (一)构造二叉树 (二)中序遍历 (三)前序遍历 前序遍历可以复制二叉树,效率比重新构造二叉树高 (四)后序遍历 ...

  • 数据结构:树的实现和遍历(c++)

    (一)二叉树的遍历——递归实现 二叉树常见的遍历方式分为前序遍历、中序遍历和后序遍历。 1 前序遍历 前序遍历也叫...

  • leetcode 144 145 94

    二叉树遍历 前序遍历 中序遍历 后序遍历

网友评论

      本文标题:二叉树遍历

      本文链接:https://www.haomeiwen.com/subject/mcpqpttx.html