面试过程中略有所感
题目 1
遍历二叉树 每行独立打印
/**
* -> D
* -> B
* A -> E
* -> F
* -> C
* -> G
这是遍历的结构
```
思路
1 首先设计 节点
2 每一行存储在一个list中
3 利用队列的陷入先出 代码
#### 设计的节点
java
class TNode {
private String data;
private TNode lChild;
private TNode rChild;
private TNode(String data, TNode lc, TNode rc) {
this.data = data;
this.lChild = lc;
this.rChild = rc;
}
public TNode() {
}
public TNode(String data) {
this.data = data;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public TNode getlChild() {
return lChild;
}
public void setlChild(TNode lChild) {
this.lChild = lChild;
}
public TNode getrChild() {
return rChild;
}
public void setrChild(TNode rChild) {
this.rChild = rChild;
}
}
public void printInOneLine(TNode nodes) {
List<List<String>> alls = new ArrayList<>();
if (nodes == null)
return;
Deque<TNode> deq = new LinkedList<TNode>();
deq.addLast(nodes);
while (!deq.isEmpty()) {
List<String> list = new ArrayList<>();
int size = deq.size();
for (int i = 0; i < size; i++) {
TNode pop = deq.pop();
list.add(pop.getData());
if (pop.getlChild() != null) {
deq.add(pop.getlChild());
}
if (pop.getrChild() != null) {
deq.add(pop.getrChild());
}
}
alls.add(list);
}
print(alls);
}
private void print( List<List<String>> alls){
for (List<String> nodeList : alls) {
for (String node : nodeList) {
System.out.print(node);
}
System.out.println();
}
}
#### 测试结果
TNode a = new TNode();
a.setData(“A”);
TNode b = new TNode(“B”);
TNode c = new TNode(“C”);
TNode d = new TNode(“D”);
TNode e = new TNode(“E”);
TNode f = new TNode(“F”);
TNode g = new TNode(“G”);
a.setlChild(b);
a.setrChild©;
b.setlChild(d);
b.setrChild(e);
c.setlChild(f);
c.setrChild(g);
最终结果
A
BC
DEFG