자바 이 진 트 리 관련 코드 구현 - 데이터 구조
/*1. :2014-11-5
*2. :
*3. :
*3. :
*4. :
* **/
package Tree;
import Tree.node;
public interface TreeNode {
// class Node {};
// 1.
int GetNodeNum(node root);
// 2.
int GetDepth(node root);
// 3. , ,
void PreOrderTraverse(node root);
void InOrderTraverse(node root);
void PostOrderTraverse(node root);
// 4. ( , )
void LevelTraverse(node root);
// 5.
// 6. K
// 7.
// 8.
// 9.
// 10.
// 11.
// 12.
// 13.
// 14.
}
노드
package Tree;
//* 。
public class node {
public Object data; // 。
public node leftChild; // 。
public node rightChild; // 。
public node(Object value) {
this.data = value;
leftChild = null;
rightChild = null;
}
}
구체 적 실현
/*1. :2014-11-13
*2. :
*3. :
*3. :
*4. :
* **/
package Tree;
import Tree.node;
import Tree.ArrayQueue;
public class BinaryTreeNode implements TreeNode {
private node root; //
BinaryTreeNode() {
root = null;
}
// 1.
// :
// (1) , 0
// (2) , = + + 1
public int GetNodeNum(node root) {
if (root == null) //
return 0;
return GetNodeNum(root.rightChild) + GetNodeNum(root.leftChild) + 1;
};
// 2.
// :
// (1) , 0
// (2) , = max( , ) + 1
public int GetDepth(node root) {
if (root == null) //
return 0;
int depthLeft = GetDepth(root.leftChild);
int depthRight = GetDepth(root.rightChild);
return depthLeft > depthRight ? (depthLeft + 1) : (depthRight + 1);
};
// 3. , ,
// :
// (1) ,
// (2) , , ,
// private void Visit(Node root){
// if (root == null)
// return ;
// System.out.print("......");
// Visit(root.leftChild); //
// Visit(root.rightChild); //
// };
public void PreOrderTraverse(node root) {
if (root == null)
return;
System.out.print(root.data + " ");
PreOrderTraverse(root.leftChild);
PreOrderTraverse(root.rightChild);
// Visit(root);
};
//
// (1) , 。
// (2) , , ,
public void InOrderTraverse(node root) {
if (root == null)
return;
InOrderTraverse(root.leftChild);
System.out.print(root.data + " ");
InOrderTraverse(root.rightChild);
//
};
//
// (1) ,
// (2) , , ,
public void PostOrderTraverse(node root) {
PostOrderTraverse(root.leftChild);
PostOrderTraverse(root.rightChild);
System.out.print(root.data + " ");
};
// 4. ( , )
// , 。
// , : , ,
// , 。
public void LevelTraverse(node root) {
ArrayQueue q = new ArrayQueue();
if (root == null)
return;
q.enQueue(root);
while (!q.isEmpty()) {
root.data = q.getFront();
q.deQueue();
System.out.print(root.data + " "); //
if (root.leftChild != null)
q.enQueue(root.leftChild);
if (root.rightChild != null)
q.enQueue(root.rightChild);
}
return;
}
// 5. K
// :
// (1) k<1 0
// (2) k==1, 1
// (3) k>1, k-1 k-1
int GetNodeNumKthLevel(node root, int k)
{
if(root == null || k < 1)
return 0;
if(k == 1)
return 1;
int numLeft = GetNodeNumKthLevel(root.leftChild, k-1); // k-1
int numRight = GetNodeNumKthLevel(root.rightChild, k-1); // k-1
return (numLeft + numRight);
}
// 6.
// :
// (1) , 0
// (2) , 1
// (3) , ,
int GetLeafNodeNum(node root)
{
if(root == null)
return 0;
if(root.leftChild == null && root.rightChild == null)
return 1;
int numLeft = GetLeafNodeNum(root.leftChild); //
int numRight = GetLeafNodeNum(root.leftChild); //
return (numLeft + numRight);
}
// 7.
// 。 。
// :
// (1) ,
// (2) , ,
// (3) , ,
boolean StructureCmp(node root1, node root2)
{
if(root1 == null && root2 == null) // ,
return true;
else if(root1 == null || root2 == null) // , ,
return false;
boolean resultLeft = StructureCmp(root1.leftChild,root2.leftChild); //
boolean resultRight = StructureCmp(root1.rightChild, root2.rightChild); //
return (resultLeft && resultRight);
}
// 8.
// :
// (1) ,
// (2) , AVL 1, ,
boolean IsAVL(node root, int height)
{
if(root == null) // ,
{
height = 0;
return true;
}
int heightLeft = 0;
boolean resultLeft = IsAVL(root.leftChild, heightLeft);
int heightRight = 0;
boolean resultRight = IsAVL(root.rightChild, heightRight);
if(resultLeft && resultRight && abs(heightLeft - heightRight) <= 1) // AVL, 1,
{
height = max(heightLeft, heightRight) + 1;
return true;
}
else
{
height = max(heightLeft, heightRight) + 1;
return false;
}
}
private int max(int heightLeft, int heightRight) {
return heightLeft>heightRight?heightLeft:heightRight;
}
private int abs(int i) {
if(i>0) return i;
else return -i;
}
//9.
public node insert(node root, Object x)
{
node p = null ;
p.data=x;
p.leftChild=null;
p.rightChild=null;
if(root == null){
root = p;
}
else if(root.leftChild== null){
root.leftChild = insert(root.leftChild,x);
}
else if(root.rightChild== null){
root.rightChild= insert(root.rightChild,x);
}
return root;
}
}
대기 열 참조
package Tree;
/**
*
* @author
*/
public class ArrayQueue implements Queue {
private Object[] data;
private int front;
private int rear;
public ArrayQueue(int capacity) {
this.data = new Object[capacity];
this.front = this.rear = 0;
}
public ArrayQueue() {
this(1024);
}
public void clear() {
this.front = this.rear = 0;
}
public boolean isEmpty() {
return this.front == this.rear;
}
public Object getFront() {
if (isEmpty()) {
throw new UnsupportedOperationException(" ");
}
return data[front];
}
public void enQueue(Object o) {
if (isFull()) {
throw new UnsupportedOperationException(" ");
}
this.data[rear++] = o;
rear %= data.length;
}
public Object deQueue() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
private boolean isFull() {
return ((rear + 1) % data.length) == front;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.