이 진 트 리 의 재 귀, 비 재 귀 및 층 차 를 옮 겨 다 니 는 자바 구현
12109 단어 데이터 구조
/**
* @author qiaoyang
* @version 1.0
*/
class TreeNode //
{
int val;
TreeNode left;
TreeNode right;
TreeNode(int val){
this.val=val;
}
}
다음은 이 진 트 리 의 구축 방법 으로 이 진 트 리 가 비어 있 는 것 과 비어 있 는 것 두 가지 상황 으로 나 뉜 다.이 진 트 리 는 빈 곳 에 뿌리 노드 를 만 들 고 빈 곳 이 아 닐 때 적당 한 위 치 를 선택 하여 삽입 합 니 다.
public void insert(int val) {//
if (root == null) {
root = new TreeNode(val);
} else {
_insert(root, val);
}
}
private void _insert(TreeNode n, int val) {
// ,
assert n != null;
if (val > n.val) {// ,
if (n.right != null) {
_insert(n.right, val);
} else {
n.right = new TreeNode(val);
}
}
else{
if (n.left != null) {
_insert(n.left, val);
} else {
n.left = new TreeNode(val);
}
}
}
그 다음 에 나무의 층 차 를 옮 겨 다 니 는 것 입 니 다. 즉, 넓 은 범위 에서 먼저 옮 겨 다 니 는 코드 입 니 다.
public void BFS(TreeNode root)//
{
ArrayDeque deque=new ArrayDeque();
deque.add(root);//
while(!deque.isEmpty()){
TreeNode temp=deque.remove();
System.out.print(temp.val+"--");
if(temp.left!=null){
deque.add(temp.left);
}
if(temp.right!=null){
deque.add(temp.right);
}
}
}
다음은 이 진 트 리 의 세 가지 재 귀적 코드 입 니 다.
public void PreOrder(TreeNode root)//
{
if(root!=null){
System.out.print(root.val+"--");//
PreOrder(root.left);
PreOrder(root.right);
}
}
public void InOorder(TreeNode root)//
{
if(root!=null){
InOorder(root.left);
System.out.print(root.val+"--");
InOorder(root.right);
}
}
public void PostOrder(TreeNode root)//
{
if(root!=null){
PostOrder(root.left);
PostOrder(root.right);
System.out.print(root.val+"--");
}
}
다음은 이 진 트 리 의 세 가지 비 재 귀적 으로 옮 겨 다 니 며 스 택 을 사용 하여 이 루어 집 니 다.
public void PreOrder_Stack(TreeNode root)//
{
Stack sta=new Stack();
while(!sta.empty()||root!=null){
if(root==null){
TreeNode temp=sta.pop();
root=temp.right;
}
else{
System.out.print(root.val+"--");//
sta.push(root);// ,
root=root.left;
}
}
}
public void InOorder_Stack(TreeNode root)//
{
Stack sta=new Stack();
while(!sta.empty()||root!=null){
if(root==null){
TreeNode temp=sta.pop();
System.out.print(temp.val+"--");
root=temp.right;
}
else{
sta.push(root);
root=root.left;//
}
}
}
public void PostOrder_Stack(TreeNode root)//
{
Stack sta=new Stack();
TreeNode p=root;
do{
// while , , ,
while(p!=null){//
sta.push(p);
p=p.left;
}
TreeNode q=null;
while(!sta.empty()){
p=sta.pop();
if(p.right==q){
System.out.print(p.val+"--");
q=p;//
}
else{
sta.push(p);
p=p.right;
break;
}
}
}while(!sta.empty());
}
마지막 으로 간단 한 주 함 수 를 써 서 테스트 를 진행 하 였 다.
public class Main//
{
public static void main(String[] args)
{
Tree tree=new Tree();
int arr[]={2,4,6,7,1,5,9,12,3,0};
for(int i=0;i
tree.insert(arr[i]);
}
System.out.println(" :");
tree.PreOrder(tree.root);
System.out.println("");
tree.InOorder(tree.root);
System.out.println("");
tree.PostOrder(tree.root);
System.out.println("");
System.out.println(" ");
tree.PreOrder_Stack(tree.root);
System.out.println("");
tree.InOorder_Stack(tree.root);
System.out.println("");
tree.PostOrder_Stack(tree.root);
System.out.println("");
System.out.println(" :");
tree.BFS(tree.root);
}
}
기본적으로 이 진 트 리 의 생 성, 재 귀 와 비 재 귀, 그리고 층 차 를 옮 겨 다 니 는 것 을 실현 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.