| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1797 人关注过本帖
标题:新手问一个关于根据先序,中序构建二叉树问题!!
只看楼主 加入收藏
Furay
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-11-24
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
新手问一个关于根据先序,中序构建二叉树问题!!
java实现
程序代码:
public class Binarytree {
    BTNode root;
    int i;
    String s;
    public Binarytree(){
        String[] Pre="A B C I D E H F J G".split(" ");
        String[] Mid="B I C A H E J F G D".split(" ");
        root=BuildFromPreMid(Pre,Mid,0,Pre.length-1,0,Mid.length-1);
        lastorder(root);
    }

    public void preorder(BTNode tn){
        if(tn!=null){
            System.out.print(tn.S+" ");
            preorder(tn.left);
            preorder(tn.right);
        }
    }
    public void midorder(BTNode tn){
        if(tn!=null){
            midorder(tn.left);
            System.out.print(tn.S+" ");
            midorder(tn.right);
        }
    }
    public void lastorder(BTNode tn){
        if(tn!=null){
            lastorder(tn.left);
            lastorder(tn.right);
            System.out.print(tn.S+" ");
        }
    }
    
    BTNode BuildFromPreMid(String[] Pre,String[] Mid,int PS,int PE,int MS,int ME){
        BTNode node=new BTNode();
        node.S=Pre[PS];
        int i=0;
        while(!Mid[MS+i].equals(node.S)){
            i++;
        }
        if(i>0){
            node.left=BuildFromPreMid(Pre,Mid,PS+1,PS+i,MS,MS+i-1);
        }
        if(MS+i<ME){
            node.right=BuildFromPreMid(Pre,Mid,PS+i+1,PE,MS+i+1,ME);
        }
        return node;
    }

    public static void main(String[] args) {
        Binarytree b=new Binarytree();

    }
    class BTNode{
        String S; 
        BTNode right,left,parent;
    }

}

这个是别人的代码,可以实现
我想问的是在构建左右子数时候   
         if(i>0){
            node.left=BuildFromPreMid(Pre,Mid,PS+1,PS+i,MS,MS+i-1);
        }
        if(MS+i<ME){
            node.right=BuildFromPreMid(Pre,Mid,PS+i+1,PE,MS+i+1,ME);
        }
这一段我没看懂,有大神讲解下吗谢谢!!!ps:ps为先序开始,pe为先序结束,ms为中序开始,me为中序结束

[此贴子已经被作者于2016-11-24 14:25编辑过]

搜索更多相关主题的帖子: java color 二叉树 
2016-11-24 14:24
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:20 
程序代码:
BTNode BuildFromPreMid(String[] Pre, String[] Mid, int PS, int PE, int MS, int ME) {
    BTNode node = new BTNode();
    node.S = Pre[PS];  // 当前节点根节点就是先序遍历节点

    int i = 0;
    // 找到当前节点在中序的位置,用 MS + i表示
    // 跳过的节点数目为 i,即 i表示当前节点左子树数目
    while (!Mid[MS + i].equals(node.S)) {
        i++;
    }

    // i不为 0,有左子树
    if (i > 0) {
        node.left = BuildFromPreMid(Pre, Mid, PS + 1, PS + i, MS, MS + i - 1);
    }
    // 如果节点在中序不是最后一个,那么当前节点有右子树
    if (MS + i < ME) {
        node.right = BuildFromPreMid(Pre, Mid, PS + i + 1, PE, MS + i + 1, ME);
    }
    return node;
}


这么写了一下,还是不明白的话,就用ide debug跟进看看吧。


[fly]存在即是合理[/fly]
2016-11-24 17:30
快速回复:新手问一个关于根据先序,中序构建二叉树问题!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033716 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved