JAVA는 두 갈래 나무의 전, 중, 후 순서를 반복한다(귀속과 비귀속)
8674 단어 검지offer 알고리즘 문제java 구현
우선 두 갈래 트리의 구조 정의는java 코드는 다음과 같다.
public class Node {
private int data;
private Node leftNode;
private Node rightNode;
public Node(int data, Node leftNode, Node rightNode){
this.data = data;
this.leftNode = leftNode;
this.rightNode = rightNode;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getLeftNode() {
return leftNode;
}
public void setLeftNode(Node leftNode) {
this.leftNode = leftNode;
}
public Node getRightNode() {
return rightNode;
}
public void setRightNode(Node rightNode) {
this.rightNode = rightNode;
}
}
먼저 전 · 중 · 후 순서가 두루 반복되는 귀속 실현인데, 이것은 그래도 비교적 간단하다
public void theFirstTraversal(Node root) { //
visit(root);
if (root.getLeftNode() != null) { //
theFirstTraversal(root.getLeftNode());
}
if (root.getRightNode() != null) { //
theFirstTraversal(root.getRightNode());
}
}
public void theInOrderTraversal(Node root) { //
if (root.getLeftNode() != null) {
theInOrderTraversal(root.getLeftNode());
}
visit(root);
if (root.getRightNode() != null) {
theInOrderTraversal(root.getRightNode());
}
}
public void thePostOrderTraversal(Node root) { //
if (root.getLeftNode() != null) {
thePostOrderTraversal(root.getLeftNode());
}
if(root.getRightNode() != null) {
thePostOrderTraversal(root.getRightNode());
}
visit(root);
}
그러나 일부 면접관들은 비귀속 실현의 사고방식을 시험할 수 있기 때문에 실제로는 창고의 보조 실현을 빌려야 한다.코드는 다음과 같습니다.
public void theFirstTraversal_Stack(Node root) { //
Stack stack = new Stack();
Node node = root;
while (node != null || stack.size() > 0) { //
if (node != null) { //
visit(node);
stack.push(node);
node = node.getLeftNode();
} else {
node = stack.pop();
node = node.getRightNode();
}
}
}
public void theInOrderTraversal_Stack(Node root) { //
Stack stack = new Stack();
Node node = root;
while (node != null || stack.size() > 0) {
if (node != null) {
stack.push(node); //
node = node.getLeftNode();
} else {
node = stack.pop(); //
visit(node);
node = node.getRightNode();
}
}
}
public void thePostOrderTraversal_Stack(Node root) { //
Stack stack = new Stack();
Stack output = new Stack();//
Node node = root;
while (node != null || stack.size() > 0) {
if (node != null) {
output.push(node);
stack.push(node);
node = node.getRightNode();
} else {
node = stack.pop();
node = node.getLeftNode();
}
}
System.out.println(output.size());
while (output.size() > 0) {
visit(output.pop());
}
}
/** */
protected static void iterativePostorder3(Node p) {
Stack stack = new Stack();
Node node = p, prev = p;
while (node != null || stack.size() > 0) {
while (node != null) {
stack.push(node);
node = node.getLeft();
}
if (stack.size() > 0) {
Node temp = stack.peek().getRight();
if (temp == null || temp == prev) {
node = stack.pop();
visit(node);
prev = node;
node = null;
} else {
node = temp;
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
이메일 보내기 이메일(java 구현)텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.