1.5 두 갈래 나무(4)
두 갈래 나무 관련 문제 풀이 세트
주의점
카탈로그
위에서 아래로 두 갈래 나무를 인쇄하다
위에서 아래로 두 갈래 나무의 각 노드를 인쇄하고, 같은 층의 노드는 왼쪽에서 오른쪽으로 인쇄합니다.
public ArrayList PrintFromTopToBottom(TreeNode root) {
ArrayList res = new ArrayList<>();
if (root == null) {
return res;
}
LinkedList queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode p = queue.poll();
res.add(p.val);
if (p.left != null) {
queue.add(p.left);
}
if (p.right != null) {
queue.add(p.right);
}
}
return res;
}
두 갈래 나무를 여러 줄로 인쇄하다
위에서 아래로 층별로 두 갈래 트리를 인쇄하고 같은 층의 결점은 왼쪽에서 오른쪽으로 출력합니다.층마다 줄을 출력합니다.
ArrayList> Print(TreeNode pRoot) {
ArrayList> res = new ArrayList<>();
ArrayList list = new ArrayList<>();
if (pRoot == null) {
res.add(list);
return res;
}
LinkedList queue = new LinkedList<>();
queue.add(pRoot);
// last ,nlast
TreeNode last = pRoot, nlast = pRoot;
while (!queue.isEmpty()) {
TreeNode p = queue.poll();
list.add(p);
if (p.left != null) {
queue.add(p.left);
nlast = p.left;
}
if (p.right != null) {
queue.add(p.right);
nlast = p.right;
}
// last ,
// last nlast,
if (p == last) {
last = nlast;
res.add(list);
list = new ArrayList<>();
}
}
return res;
}
지그재그 순서로 두 갈래 나무를 인쇄하다
함수는 지그재그로 두 갈래 트리를 인쇄합니다. 즉, 첫 번째 줄은 왼쪽에서 오른쪽으로, 두 번째 줄은 오른쪽에서 왼쪽으로, 세 번째 줄은 왼쪽에서 오른쪽으로, 다른 줄은 이와 같이 인쇄합니다.
public ArrayList> Print(TreeNode pRoot) {
ArrayList> res = new ArrayList<>();
ArrayList list = new ArrayList<>();
if (pRoot == null) {
return res;
}
LinkedList queue = new LinkedList();
queue.add(pRoot);
boolean leftToRight = true;
TreeNode left = pRoot, right = pRoot;
while (!queue.isEmpty()) {
if (leftToRight) {
TreeNode p = queue.poll();
list.add(p.val);
if (p.left != null) {
queue.add(p.left);
}
if (p.right != null) {
queue.add(p.right);
}
if (p == right) {
left = queue.peek();
res.add(list);
list = new ArrayList<>();
}
} else {
TreeNode p = queue.pollLast();
list.add(p.val);
if (p.right != null) {
queue.addFirst(p.right);
}
if (p.left != null) {
queue.addFirst(p.left);
}
if (p == left) {
right = queue.peekLast();
res.add(list);
list = new ArrayList<>();
}
}
leftToRight = !leftToRight;
}
return res;
}
서열화 두 갈래 나무
두 함수를 실현하십시오. 각각 서열화와 반서열화 두 갈래 나무에 쓰십시오
String Serialize(TreeNode root) {
if (root == null) {
return "[]";
}
StringBuilder sb = new StringBuilder();
LinkedList q = new LinkedList<>();
q.add(root);
sb.append("[").append(root.val).append(",");
while (!q.isEmpty()) {
TreeNode p = q.poll();
if (p.left != null) {
sb.append(p.left.val).append(",");
q.add(p.left);
} else {
sb.append("#,");
}
if (p.right != null) {
sb.append(p.right.val).append(",");
q.add(p.right);
} else {
sb.append("#,");
}
}
return sb.deleteCharAt(sb.length() - 1).append("]").toString();
}
TreeNode Deserialize(String str) {
if (str == null || str.equals("[]")) {
return null;
}
String[] arr = str.substring(1, str.length() - 1).split(",");
int k = 0, len = arr.length;
LinkedList q = new LinkedList<>();
TreeNode root = new TreeNode(Integer.valueOf(arr[k++]));
q.add(root);
while (k < len && !q.isEmpty()) {
TreeNode p = q.poll();
if (k < len && !"#".equals(arr[k])) {
p.left = new TreeNode(Integer.valueOf(arr[k]));
q.add(p.left);
}
k++;
if (k < len && !"#".equals(arr[k])) {
p.right = new TreeNode(Integer.valueOf(arr[k]));
q.add(p.right);
}
k++;
}
return root;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.