재귀에 도움이 필요합니다. 나는 C#에서 이진 트리를 만들려고하는데, 모든 Inorder/PostOrder와 PreOrder traversal을 재귀 함수로 보여줄 수 있는지 궁금하다.C# 이진 트리 - Inorder/Preorder 및 PostOrder (재귀 도움말)
PreOrder를 완료 한 다음 InOrder를 시도했지만 StackOverflow 예외가 발생했습니다. 바이너리 트리에 대한 내 이해가 너무 어리석기 때문에 어리석은 질문처럼 보일지라도이 부분에 대한 도움은 많이 받으실 것입니다.
다음 코드는 PreOrder Traversal에 사용하고있는 코드입니다.
public void recursivePreorder(BinaryTreeNode root)
{
Console.Write(root.Data.ToString());
if (root.Left != null)
{
recursivePreorder(root.Left);
}
if (root.Right != null)
{
recursivePreorder(root.Right);
}
}
public void preorderTraversal()
{
if (Root != null)
{
recursivePreorder(Root);
}
else
{
Console.WriteLine("There is no tree to process");
}
static void Main(string[] args)
{
// Build the tree
Test.Add(5);
Test.Add(2);
Test.Add(1);
Test.Add(3);
Test.Add(3); // Duplicates are OK
Test.Add(4);
Test.Add(6);
Test.Add(10);
Test.Add(7);
Test.Add(8);
Test.Add(9);
// Test if we can find values in the tree
for (int Lp = 1; Lp <= 10; Lp++)
Console.WriteLine("Find Student ID ({0}) = {1}", Lp, Test.Find(Lp));
// Test if we can find a non-existing value
Console.WriteLine("Find Student ID (999) = {0}", Test.Find(999));
// Iterate over all members in the tree -- values are returned in sorted order
foreach (int value in Test)
{
Console.WriteLine("Value: {0}", value);
}
Console.WriteLine("Preorder Traversal");
Console.WriteLine("");
Test.preorderTraversal();
Console.WriteLine("");
}
미리 감사드립니다, 이것은 확실히 내가 주위에 내 머리를 얻는 데 문제가 무엇인가하고 나는 그것이 가능하다면 모르겠어요.
public void recursiveInorder(BinaryTreeNode root)
{
if (root.Left != null)
{
recursiveInorder(root.Left);
}
Console.Write(root.Data.ToString());
if (root.Right != null)
{
recursiveInorder(root.Right);
}
}
예약 주문에 차이가 먼저 왼쪽을 통과하는 것이 그냥 :
빠른 답변을 주셔서 대단히 감사합니다. 혹시 PostOrder도 보여줄 수 있습니까? 그리고 그게 실제로 어떻게 효과가 있는지 설명해 주실 수 있습니까? 저는 바이너리 트리의 작동 방식과 재귀가 작동하는 방식에 막 달라 붙었습니다. 비록 당신의 대답이 완벽하게 명확하기는하지만이 주제를 둘러싼 모든 것을 이해하는 데 어려움을 겪고있는 것 같습니다. –
@SteffanCaine : 잠시 생각해보십시오 : * post * 명령은 현재 노드의 처리를 마지막으로 이동시킵니다. 그래서'Console.Write' 문을 어디에 놓을까요? @Mitch가 링크 된 wikipedia 기사도 확인하십시오. – BrokenGlass
하, 나는 그것이 간단하고 아래 기사 링크와 귀하의 회신과 함께 그것은 매우 분명하다는 것을 알았습니다. 고마워요.) –