下面簡單介紹一下幾種算法和思路:
先序遍歷:
1. 訪問根結點
2. 按先序遍歷左子樹;
3. 按先序遍歷右子樹;
4. 例如:遍歷已知二叉樹結果為:A->B->D->G->H->C->E->F
中序遍歷:
1. 按中序遍歷左子樹;
2. 訪問根結點;
3. 按中序遍歷右子樹;
4. 例如遍歷已知二叉樹的結果:B->G->D->H->A->E->C->F
後序遍歷:
1. 按後序遍歷左子樹;
2. 按後序遍歷右子樹;
3. 訪問根結點;
4. 例如遍歷已知二叉樹的結果:G->H->D->B->E->F->C->A
層次遍歷:
1.從上到下,從左到右遍歷二叉樹的各個結點(實現時需要借輔助容器);
2.例如遍歷已知二叉樹的結果:A->B->C->D->E->F->G->H
下面只是做了一個中序遍歷
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TreeNode_2008
{
// Binary Tree的結點類
class Node
{
public int Data { get; set; }
public Node LeftSubNode { get; set; }
public Node RightSubNode { get; set; }
// 結點為自己追加子結點(與向左/向右追加結合,形成遞歸)
public void Append(Node subNode)
{
if (subNode.Data <= this.Data)
{
this.AppendLeft(subNode);
}
else
{
this.AppendRight(subNode);
}
}
// 向左追加
public void AppendLeft(Node subNode)
{
if (this.LeftSubNode == null)
{
this.LeftSubNode = subNode;
}
else
{
this.LeftSubNode.Append(subNode);
}
}
// 向右追加
public void AppendRight(Node subNode)
{
if (this.RightSubNode == null)
{
this.RightSubNode = subNode;
}
else
{
this.RightSubNode.Append(subNode);
}
}
// 結點顯示自己的數據
public void ShowData()
{
Console.WriteLine("Data={0}", this.Data);
}
}
// Binary Tree類
class Tree
{
// 根結點
public Node Root { get; set; }
// 以某結點為起點,插入結點
public void Insert(Node newNode)
{
if (this.Root == null)
{
this.Root = newNode;
}
else
{
this.Root.Append(newNode);
}
}
// 重載,默認以根結點為起點插入
public void MidTravel()
&nbs