두 갈래 나무는 차례차례 총결산하지 않는다.
package BinaryTree;
import java.util.*;
public class BinaryTree
{
private BinaryTree lchild;
private BinaryTree rchild;
private int data;
private boolean secondPushTostack =false ;
public BinaryTree(BinaryTree l, BinaryTree r, int data)
{
lchild = l;
rchild = r;
this.data = data;
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
BinaryTree G= new BinaryTree(null, null, 8);
BinaryTree H= new BinaryTree(null, null, 8);
BinaryTree F= new BinaryTree(G, H, 6);
BinaryTree D= new BinaryTree(null, F, 4);
BinaryTree E= new BinaryTree(null, null, 5);
BinaryTree B= new BinaryTree(D, E, 2);
BinaryTree C= new BinaryTree(null, null, 3);
BinaryTree A = new BinaryTree(B, C, 1);
Vector<BinaryTree> vector = new Vector<BinaryTree>();
System.out.println();
//boolean hasNode = HasNode(A, G);
//System.out.println(hasNode);
FindPathEqualsToExpectedValue(A, A.data, 22, vector);
//FindPath(A, G, vector);
// InOderTraverse(A);
//
// System.out.println();
//
// PreOderTraverse(A);
// System.out.println();
// System.out.println();
//PostOderTraverse(A);
}
public static void PreOderTraverse(BinaryTree node)
{
Stack<BinaryTree> stack = new Stack<BinaryTree>();
do
{
while (node != null)
{
System.out.println(node.data);
stack.push(node);
node = node.lchild;
}
node = (BinaryTree) stack.pop();
node = node.rchild;
} while (!stack.isEmpty() || node != null);
}
public static void InOderTraverse(BinaryTree node)
{
Stack<BinaryTree> stack = new Stack<BinaryTree>();
do
{
while (node!= null)
{
stack.push(node);
node = node.lchild;
}
node= (BinaryTree)stack.pop();
System.out.println(node.data);
node = node.rchild;
} while (!stack.isEmpty() || node != null);
}
public static void PostOderTraverse(BinaryTree node)
{
Stack<BinaryTree> stack = new Stack<BinaryTree>();
do
{
while (node!= null)
{
stack.push(node);
node = node.lchild;
}
node= (BinaryTree)stack.pop();
while (node.secondPushTostack == true)
{
System.out.println(node.data);
if(!stack.isEmpty())
node= (BinaryTree)stack.pop();
else
{
return;
}
}
node.secondPushTostack =true;
stack.push(node);
node = node.rchild;
} while (!true);
}
public static boolean HasNode(BinaryTree node, BinaryTree expectNode)
{
if (node == null)
return false;
if (expectNode == null)
return false;
if (node.data == expectNode.data)
return true;
return HasNode(node.lchild, expectNode) || HasNode(node.rchild, expectNode);
}
public static void FindPath(BinaryTree pHead, BinaryTree targetNode, Vector<BinaryTree> vector)
{
if (pHead == null || targetNode == null)
{
return;
}
vector.add(pHead);
if (pHead.data == targetNode.data)
{
for (int i = 0; i < vector.size(); i++)
{
System.out.println(vector.get(i).data);
}
}
FindPath(pHead.lchild, targetNode, vector);
FindPath(pHead.rchild, targetNode, vector);
vector.remove(vector.size()-1);
}
public static void FindPathEqualsToExpectedValue(BinaryTree pHead, int CurrentValue, int ExpectedValue, Vector<BinaryTree> vector)
{
if (pHead == null)
{
return ;
}
vector.add(pHead);
CurrentValue = CurrentValue + pHead.data;
if (pHead.rchild== null && pHead.lchild == null && CurrentValue == ExpectedValue)
{
for (int i = 0; i < vector.size(); i++)
{
System.out.print(vector.get(i).data + " ");
}
System.out.println();
}
FindPathEqualsToExpectedValue(pHead.lchild, CurrentValue, ExpectedValue, vector);
FindPathEqualsToExpectedValue(pHead.rchild, CurrentValue, ExpectedValue, vector);
CurrentValue = CurrentValue - pHead.data;
vector.remove(vector.size()-1);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.