이 진 트 리 의 생 성, 옮 겨 다 니 기 (선 순, 중 순, 후 순, 차원) (재 귀 와 비 재 귀) - 자바 실현
14450 단어 데이터 구조
트 리 만 들 기, 코드 옮 겨 다 니 기:
public class BinaryTree {
private static class Node{
public E value; //
public Node left; //
public Node right;//
public Node(E value) {
this.value = value;
this.left = null;
this.right = null;
}
}
public static List> nodeList = null;//
/**
*
* @param length
* @return
*/
public int[] createArray(int length){
int[] array = new int[length];
for (int i = 0; i < array.length; i++) {
array[i] = (int)(Math.random() * 100);
}
return array;
}
/**
*
*/
public void createBinaryTree(int nodeNum){
nodeList = new ArrayList>();
int[] array = createArray(nodeNum);
for(int i : array){
System.out.print(i + " ");
}
System.out.println();
for (int i = 0; i < array.length; i++) {
Node temp = new Node(array[i]);
nodeList.add(temp);
}
for (int parentIndex = 0; parentIndex < array.length/2 - 1; parentIndex++) {
//
Node parentNode = nodeList.get(parentIndex);
//
parentNode.left = nodeList.get(parentIndex * 2 + 1);
//
parentNode.right = nodeList.get(parentIndex * 2 + 2);
int lastParentIndex = array.length/2 - 1;
Node lastParentNode = nodeList.get(lastParentIndex);
lastParentNode.left = nodeList.get(lastParentIndex * 2 + 1);
// ,
if (array.length % 2 == 1) {
lastParentNode.right = nodeList.get(lastParentIndex * 2 + 2);
}
}
}
/**
* ( )
* @param parentNode
*/
public void BinaryTreePreOrder(Node parentNode){
if (parentNode == null) {
return;
}
System.out.print(parentNode.value + " ");
BinaryTreePreOrder(parentNode.left);
BinaryTreePreOrder(parentNode.right);
}
/**
* ( )
* @param rootNode
*/
public void BinaryTreePreOrder_loop(Node rootNode){
Stack> stack = new Stack>();
Node cur = rootNode;
while(cur != null || !stack.isEmpty()){
while(cur != null){
System.out.print(cur.value + " ");
stack.push(cur);
cur = cur.left;
}
cur = stack.pop();
cur = cur.right;
}
}
/**
* ( )
* @param parentNode
*/
public void BinaryTreeMidOrder(Node parentNode){
if (parentNode == null) {
return;
}
BinaryTreeMidOrder(parentNode.left);
System.out.print(parentNode.value + " ");
BinaryTreeMidOrder(parentNode.right);
}
/**
* ( )
* @param rootNode
*/
public void BinaryTreeMidOrder_loop(Node rootNode){
Stack> stack = new Stack>();
Node cur = rootNode;
while(cur != null || !stack.isEmpty()){
while(cur != null){
stack.push(cur);
cur = cur.left;
}
cur = stack.pop();
System.out.print(cur.value + " ");
cur = cur.right;
}
}
/**
* ( )
* @param parentNode
*/
public void BinaryTreePostOrder(Node parentNode){
if (parentNode == null) {
return;
}
BinaryTreePostOrder(parentNode.left);
BinaryTreePostOrder(parentNode.right);
System.out.print(parentNode.value + " ");
}
/**
* ( )
* ,
* @param rootNode
*/
public void BinaryTreePostOrder_loop(Node rootNode){
Stack> stack = new Stack>();
// map
Map, Boolean> nodeMap = new HashMap, Boolean>();
stack.push(rootNode);
while(!stack.isEmpty()){
Node temp = stack.peek();
//
if (temp.left != null && !nodeMap.containsKey(temp.left)) {
temp = temp.left;
while(temp != null){
stack.push(temp);
temp = temp.left;
}
continue;
}
//
if (temp.right != null && !nodeMap.containsKey(temp.right)) {
stack.push(temp.right);
continue;
}
Node cur = stack.pop();
System.out.print(cur.value + " ");
nodeMap.put(cur, true);
}
}
/**
*
* @param rootNode
*/
public void BinaryTreeLevelOrder(Node rootNode){
//
Queue> queue = new LinkedList>();
queue.add(rootNode);
while(!queue.isEmpty()){
Node parentNode = queue.poll();
System.out.print(parentNode.value + " ");
if (parentNode.left != null) {
queue.add(parentNode.left);
}
if (parentNode.right != null) {
queue.add(parentNode.right);
}
}
}
public static void main(String[] args) {
BinaryTree tree = new BinaryTree();
System.out.println(" :");
tree.createBinaryTree(11);
Node rootNode = nodeList.get(0);
System.out.println(" ( ):");
tree.BinaryTreePreOrder(rootNode);
System.out.println();
System.out.println(" ( ):");
tree.BinaryTreePreOrder_loop(rootNode);
System.out.println();
System.out.println(" ( ):");
tree.BinaryTreeMidOrder(rootNode);
System.out.println();
System.out.println(" ( ):");
tree.BinaryTreeMidOrder_loop(rootNode);
System.out.println();
System.out.println(" ( ):");
tree.BinaryTreePostOrder(rootNode);
System.out.println();
System.out.println(" ( ):");
tree.BinaryTreePostOrder_loop(rootNode);
System.out.println();
System.out.println(" :");
tree.BinaryTreeLevelOrder(rootNode);
}
}
테스트 결과:
:
39 21 69 6 78 21 83 53 69 52 85
( ):
39 21 6 53 69 78 52 85 69 21 83
( ):
39 21 6 53 69 78 52 85 69 21 83
( ):
53 6 69 21 52 78 85 39 21 69 83
( ):
53 6 69 21 52 78 85 39 21 69 83
( ):
53 69 6 52 85 78 21 21 83 69 39
( ):
53 69 6 52 85 78 21 21 83 69 39
:
39 21 69 6 78 21 83 53 69 52 85
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.