1.二叉樹的相關概念
二叉樹的定義
二叉樹(Binary Tree)是n(n>=0)個有限元素的集合,該集合或者爲空,或者由一個稱爲根(root)的元素及兩個不相交的,被稱爲左子樹和右子樹的二叉樹組成。當集合爲空時,稱該二叉樹爲空二叉樹,在二叉樹中,一個元素也稱爲一個結點。
二叉樹是有序的,即若將其左右子樹顛倒,就稱爲另外一顆不一樣的二叉樹。
結點的度:結點所擁有的子樹的個數稱爲該結點的度。
葉結點:度爲0的結點稱爲葉結點,或者稱爲終端結點。
樹的深度:樹中全部結點的最大層數稱爲樹的深度。
樹的度:樹中個結點度的最大值稱爲該樹的度。
2.二叉樹的三種遍歷方式
二叉樹有三種遍歷方式:前序(父節點,左節點,右節點),中序(左節點,父節點,右節點),後序(左節點,右節點,父節點)。
函數
如上圖所示的一顆二叉樹,按照三種遍歷方式所打印的結果應該是:
前序:1 2 4 8 9 5 10 11 3 6 7
中序:8 4 9 2 10 5 11 1 6 3 7
後序:8 9 4 10 11 5 2 6 7 3 1spa
代碼:3d
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace binaryTree { class Program { static void Main(string[] args) { BTree tree = new BTree(3); BTreeNode temp5 = new BTreeNode(5); tree.GetHead().lChild = temp5; BTreeNode temp7 = new BTreeNode(7); tree.GetHead().rChild = temp7; BTreeNode temp1 = new BTreeNode(1); temp5.lChild = temp1; BTreeNode temp2 = new BTreeNode(2); temp5.rChild = temp2; BTreeNode temp4 = new BTreeNode(4); temp7.lChild = temp4; BTreeNode temp6 = new BTreeNode(6); temp7.rChild = temp6; BTreeNode temp9 = new BTreeNode(9); temp1.lChild = temp9; tree.preorderTraverse(tree.GetHead()); } } class BTreeNode { public int data; public BTreeNode lChild; public BTreeNode rChild; //構造函數 public BTreeNode(int x) { data = x; } } class BTree { private BTreeNode head; public BTreeNode GetHead() { return head; } public BTree(int x) { head = new BTreeNode(x); } //前序遍歷 public void preorderTraverse(BTreeNode head) { if (head == null) { Console.WriteLine("empty binary Tree!"); return; } Console.WriteLine(head.data); if (head.lChild!=null) preorderTraverse(head.lChild); if (head.rChild!=null) preorderTraverse(head.rChild); } //中序遍歷 public void inorderTraverse(BTreeNode head) { if (head == null) Console.WriteLine("empty tree"); if (head.lChild != null) inorderTraverse(head.lChild); Console.WriteLine(head.data); if (head.rChild != null) inorderTraverse(head.rChild); } } }