whycxzp
2021-07-26 8c189b243bfbbacb2ab1ce79f4e1ff22708f125a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
package com.whyc.dto.multiTree;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
/**
 * 多叉树之三层
 */
public class MultiTree {
 
    TreeNode root = null;
 
    public MultiTree(TreeNode root) {
        this.root = root;
    }
 
    public MultiTree() {
    }
 
    TreeNode getIndex(TreeNode node,int index){
        if(node==null){
            return null;
        }else{
            List<TreeNode> node1 = node.getNode();
            for (int i = 0; i < node1.size(); i++) {
                if(node1.get(i).getIndex()==index){
                    return node1.get(i);
                }else{
                    getIndex(node1.get(i),index);
                }
            }
        }
        return null;
    }
 
    class TreeNode {
        private int index;
        private String data;
        private List<TreeNode> node;
 
        public TreeNode(int index, String data) {
            this.index = index;
            this.data = data;
        }
 
        public int getIndex() {
            return index;
        }
 
        public void setIndex(int index) {
            this.index = index;
        }
 
        public String getData() {
            return data;
        }
 
        public void setData(String data) {
            this.data = data;
        }
 
        public List<TreeNode> getNode() {
            return node;
        }
 
        public void setNode(List<TreeNode> node) {
            this.node = node;
        }
    }
 
    public TreeNode getRoot() {
        return root;
    }
 
    public void setRoot(TreeNode root) {
        this.root = root;
    }
 
    public static void main(String[] args) {
        String dates = "2020-01-02,2020-01-03,2020-02-03,2021-06-06,2021-05-06";
        String[] dateArr = dates.split(",");
 
        MultiTree tree = new MultiTree().saveAsTree(dateArr);
        System.out.println(tree);
 
    }
 
    /**
     * 处理3层数据结构
     * @param dateArr
     * @return
     */
    public MultiTree saveAsTree(String[] dateArr) {
        root = new TreeNode(0,"0");
 
        int index = 0;
        for (int i = 0; i < dateArr.length; i++) {
            //dataArr[i]="2020-01-02"
            String[] date = dateArr[i].split("-");
            String year = date[0];
            String month = date[1];
            String day = date[2];
            //查看第一层year层是否存在,不存在则添加节点到year节点list中
            TreeNode currTreeNode = null;
            if(root.getNode()==null){
                ArrayList<TreeNode> level1Nodes = new ArrayList<>();
                level1Nodes.add(new TreeNode(++index, year));
                root.setNode(level1Nodes);
                //直接存储第二层month
                ArrayList<TreeNode> level2Nodes = new ArrayList<>();
                level2Nodes.add(new TreeNode(++index, month));
                level1Nodes.get(0).setNode(level2Nodes);
                //直接存储第三层day
                ArrayList<TreeNode> level3Nodes = new ArrayList<>();
                level3Nodes.add(new TreeNode(++index, day));
                level2Nodes.get(0).setNode(level3Nodes);
            }else{
                List<TreeNode> level1Nodes = root.getNode();
                boolean lv1Exist = false;
                //int lv1ExistIndex = 0;
                for (int j = 0; j < level1Nodes.size(); j++) {
                    //第一层year层
                    if(level1Nodes.get(j).getData().equals(year)){
                        lv1Exist = true;
                        //lv1ExistIndex = level1Nodes.get(j).getIndex();
                        currTreeNode = level1Nodes.get(j);
                        break;
                    }
                }
                //第一层year层存在
                if(lv1Exist){
                    //判断第二层month是否存在
                    TreeNode level1TreeNode = currTreeNode;
                    List<TreeNode> level2Nodes = level1TreeNode.getNode();
                    boolean lv2Exist = false;
                    //int lv2ExistIndex = 0;
                    for (int j = 0; j < level2Nodes.size(); j++) {
                        //第二层month层
                        if(level2Nodes.get(j).getData().equals(month)){
                            lv2Exist = true;
                            //lv2ExistIndex = level2Nodes.get(j).getIndex();
                            currTreeNode = level2Nodes.get(j);
                            break;
                        }
                    }
                    //第二层month层存在
                    if(lv2Exist){
                        //判断第三层day层直接添加
                        //TreeNode level3TreeNode = level2Nodes.get(lv2ExistIndex);
                        TreeNode level2TreeNode = currTreeNode;
                        List<TreeNode> level3Nodes = level2TreeNode.getNode();
                        level3Nodes.add(new TreeNode(++index,day));
                        level2TreeNode.setNode(level3Nodes);
 
                    }else{
                        //month层不存在
                        level2Nodes.add(new TreeNode(++index,month));
                        //直接存储第二层month层
                        //直接存储第三层day
                        level2Nodes.get(level2Nodes.size()-1).setNode(Arrays.asList(new TreeNode(++index,day)));
                    }
 
 
                }else{
                    //year层不存在
                    level1Nodes.add(new TreeNode(++index,year));
                    //直接存储第二层month层
                    ArrayList<TreeNode> level2Nodes = new ArrayList<>();
                    level2Nodes.add(new TreeNode(++index, month));
                    level1Nodes.get(level1Nodes.size()-1).setNode(level2Nodes);
                    //直接存储第三层day
                    ArrayList<TreeNode> level3Nodes = new ArrayList<>();
                    level3Nodes.add(new TreeNode(++index,day));
                    level2Nodes.get(0).setNode(level3Nodes);
                }
            }
 
        }
 
        return this;
    }
 
}