zoukankan      html  css  js  c++  java
  • 根据前序和中序遍历输出二叉树

    public class ReconstructionTree {
    
        private static class TreeNode {
            int val;
            TreeNode left;
            TreeNode right;
    
            public TreeNode(int val) {
                // TODO Auto-generated constructor stub
                this.val = val;
            }
        }
    
        public static void main(String[] args) {
            int[] preOrder = { 1, 2, 4, 5, 7, 3, 9 };
            int[] inOrder = { 4, 2, 7, 5, 1, 9, 3 };
            ReconstructionTree resTree = new ReconstructionTree();
            TreeNode root = null;
            root = resTree.buildBinaryTree(preOrder, 0, inOrder, 0,
                    inOrder.length - 1, root);
            System.out.println("前续遍历");
            resTree.preOrderTree(root);
            System.out.println("中序遍历");
            resTree.inOrderTree(root);
        }
    
        public void preOrderTree(TreeNode root){
            if(root!=null){
                System.out.print(root.val+"  ");
                preOrderTree(root.left);
                preOrderTree(root.right);
            }
        }
        public void inOrderTree(TreeNode root){
            if(root!=null){
                inOrderTree(root.left);
                System.out.print(root.val+"  ");
                inOrderTree(root.right);
            }
        }
        private TreeNode buildBinaryTree(int[] preOrder, int index, int[] inOrder,
                int beg, int end, TreeNode root) {
            // TODO Auto-generated method stub
            if (index >= preOrder.length)
                return null;
            
            int i;
            System.out.println("*"+preOrder[index]+"*  beg:"+beg+" end:"+end+"  index:"+index);
            
            for (i = 0; i < inOrder.length; i++) {
                if (inOrder[i] == preOrder[index]) {
                    break;
                }
            }
            if(i<beg||i>end)
                return null;
            root = new TreeNode(preOrder[index]);
            System.out.println("i:"+i);
            if (i < inOrder.length) {
                if (i <= beg)
                    root.left = null;
                else {
                    root.left = buildBinaryTree(preOrder, index + 1, inOrder, beg,
                            i - 1, root.left);
                }
                if (i >=end) {
                    root.right = null;
                } else {
                    root.right = buildBinaryTree(preOrder, i - beg + index + 1,
                            inOrder, i + 1, end, root.right);
                }
            }
            return root;
        }
    }
  • 相关阅读:
    php函数每日学习二十个(第二天)
    php函数每日学习二十个
    php代码效率小常识
    出差回来继续学习更新
    开博第一篇文章
    “类视图”和“对象浏览器”图标
    ASP.NET页面回车键触发Button按钮事件问题
    设置TextBox控件的TextMode属性
    C# 获取系统时间及时间格式
    ASP.NET 常用状态(信息)保存方式
  • 原文地址:https://www.cnblogs.com/csxf/p/3669558.html
Copyright © 2011-2022 走看看