程序员代码面试指南刷题--第零章.相关数据结构的建立

二叉树的建立

输入描述:

第一行一个数字 n 表示二叉树的总结点数。以下 n 行每行三个整数 fa lch rch,表示节点 fa 的左儿子节点为 lch,右儿子节点为 rch。(若 lch 为 0 则表示 fa 没有左儿子,rch同理)

第一行的 fa 为根节点。

ps:节点的标号就是节点的值。

输出描述:

在给定的函数中返回双向链表的头指针。

示例1

输入

9
6 4 7
4 2 5
2 1 3
5 0 0
1 0 0
3 0 0
7 0 9
9 8 0
8 0 0

建立方法一:递归

public class Main {
     
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        br.readLine();
        TreeNode root = createTree(br);
    }
 /**
     * 递归建树
     *
     * @param br
     * @return
     */
    public static TreeNode createTree(BufferedReader br) {
        try {
            String[] split = br.readLine().split(" ");
            int[] data = new int[split.length];
            for (int i = 0; i < data.length; i++) {
                data[i] = Integer.parseInt(split[i]);
            }
            TreeNode node = new TreeNode(data[0]);
            if (data[1] != 0) {
                node.left = createTree(br);
            }
            if (data[2] != 0) {
                node.right = createTree(br);
            }
            return node;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

建立方法二:利用无重复节点且书中节点值范围一定

public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        int[][] a = new int[n+1][2];
        String[] ss = reader.readLine().split(" ");
        int root = Integer.parseInt(ss[0]);
        a[root][0] = Integer.parseInt(ss[1]);
        a[root][1] = Integer.parseInt(ss[2]);
        int t;
        for (int i=1;i<n;i++){
            String[] sts = reader.readLine().split(" ");
            t = Integer.parseInt(sts[0]);
            a[t][0] = Integer.parseInt(sts[1]);
            a[t][1] = Integer.parseInt(sts[2]);
        }
        TreeNode rootNode = new TreeNode(root);
        createTree(rootNode,a);
	}
 public static void createTree(TreeNode root,int[][] a){
        if(root==null){
            return ;
        }
        int i=root.val;
        int l=a[i][0];
        int r=a[i][1];
         
        if(l!=0){
            TreeNode leftNode=new TreeNode(l);
            root.left=leftNode;
            leftNode.parent=root;
            createTree(leftNode,a);
        }
        if(r!=0){
            TreeNode rightNode=new TreeNode(r);
            root.right=rightNode;
            rightNode.parent=root;
            createTree(rightNode,a);
        }
    }
发布了189 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44406146/article/details/105358074