美文网首页
数据对数组构造多叉树

数据对数组构造多叉树

作者: 雁阵惊寒_zhn | 来源:发表于2020-11-10 08:30 被阅读0次

10月15日面试题。

题目

每个数据对,key代表一个节点,value为key节点的一个孩子,给出一个数据对数组,构造出多叉树,返回根节点。
例如,[(1, 2),(1, 3),(1, 4),(2, 5),(2, 6),(3, 7)]
构造的多叉树:


构造的多叉树

解析

  1. 依次读取数组每一个数据对,构造两个节点
  2. 节点存在一个map结构,当每次解析数据对构造节点时,都先在map中查找是否存在
  3. 若节点存在于map中,更新两个节点的关系
  4. 若节点不存在与map中,构造节点,更新两个节点的关系
  5. 每个节点需要设置一个标记sign字段,用于记录此节点是否为其他节点的子节点
  6. 遍历数组构造多叉树完成
  7. 对map结构进行遍历,找到节点sign字段标识不是其他节点子节点的节点,这个节点就是根节点

代码

//定义数据对结构
class Pair{
    int k;
    int v;
    public Pair(int k, int v){this.k = k; this.v = v;}
    public int getK() {return k;}
    public int getV() { return v;}
}
//定义多叉树节点结构
class TreeNode{
    int val;
    List<TreeNode> children = new LinkedList<>();//多叉树,节点的孩子节点
    int sign = 0;//0为根节点,1为孩子节点
    public TreeNode(int val){ this.val = val;}
    public int getVal() {return val;}
    public List<TreeNode> getChildren() {return children;}
    public int getSign() {return sign;}
    public void setSign(int sign) {this.sign = sign;}
}
//解析数据对数组,转换为多叉树
public TreeNode convertPairsToTree(Pair[] pairs){
    Map<Integer, TreeNode> map = new HashMap<>();
    //遍历数据对数组
    for (int i = 0; i < pairs.length; ++i){
        //key的节点
        TreeNode kNode = map.get(pairs[i].getK());
        if (null == kNode){
            kNode = new TreeNode(pairs[i].getK());
            map.put(pairs[i].getK(), kNode);
        }
        //value的节点
        TreeNode vNode = map.get(pairs[i].getV());
        if (null == vNode){
            vNode = new TreeNode(pairs[i].getV());
            map.put(pairs[i].getV(), vNode);
        }
        //设置value节点为子节点
        vNode.setSign(1);
        //更新两个节点的父子关系
        kNode.getChildren().add(vNode);
    }
    //对map结构进行遍历,找到节点sign字段标识不是其他节点子节点的节点,这个节点就是根节点
    for (Map.Entry<Integer, TreeNode> entry : map.entrySet()){
        if (entry.getValue().getSign() == 0){
            return entry.getValue();
        }
    }
    return null;
}

相关文章

  • 数据对数组构造多叉树

    10月15日面试题。 题目 每个数据对,key代表一个节点,value为key节点的一个孩子,给出一个数据对数组,...

  • 二叉树链式存储

    一、二叉树构造 二、二叉树基本操作 1、打印数据 2、构造空二叉树T 销毁二叉树初始条件: 二叉树T存在。操作结果...

  • 数据结构之二叉树

    数据结构之二叉树 递归构造二叉树 二叉树节点: 递归构造: 图示: 递归遍历 递归实现先序遍历 图示: 递归实现中...

  • 二叉树

    参考文章 百度 数据结构中有很多树的结构,其中包括二叉树、二叉搜索树、2-3树、红黑树等等。本文中对数据结构中常见...

  • 三个树构造算法

    已知先序和后序构造正则二叉树 已知先序和中序构造二叉树 已知中序和后序构造二叉树

  • 比较器 二叉树实现(BinaryTree)

    与链表不同的是,树的最大特征是可以针对数据进行排序。(二叉排序树) 二叉排序树的操作原理选择第一个数据作为根节点,...

  • 堆排序(Java)

    堆排序:堆排序的思想比较难理解,首先将数据看成是一个二叉树,对数据进行二叉树的建立(建堆),这个过程也是排序的过程...

  • 前端二叉树

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

  • 构造二叉树

    构造二叉树 01 前序和中序遍历 构造二叉树 https://leetcode-cn.com/problems/c...

  • Java_二叉树用途

    赫夫曼树 赫夫曼树的构造 赫夫曼树构造过程 查找二叉树

网友评论

      本文标题:数据对数组构造多叉树

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