基礎數據結構----二叉樹

假定給定數組:node

int[] bArr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 實現如下功能。git

編程語言定義一個二叉樹,二叉樹節點數據類型爲int:

定義葉子節點數據結構:

class Node {
        public Node leftChild { get; set; }
        public Node rightChild { get; set; }
        public int data { get; set; }

        public Node(int newData) {
            leftChild = null;
            rightChild = null;
            data = newData;
        }
    }

建立二叉樹:

/// <summary>
        /// 建立二叉樹樹
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        static List<Node> createdBinTree(int[] arr) {
            List<Node> nodeList = new List<Node>();
            //將數組值依次轉入Node節點
            for (int i = 0; i < arr.Length; i++)
            {
                nodeList.Add(new Node(arr[i]));
            }

            for (int j = 0; j < arr.Length/2-1; j++)
            {
                //左孩子
                nodeList[j].leftChild = nodeList[j * 2 + 1];
                //右孩子
                nodeList[j].rightChild = nodeList[j * 2 + 2];
            }

            //最後一個節點:由於最後一個父節點可能沒有右孩子,因此單獨拿出來處理
            int last = arr.Length / 2 - 1;
            //左孩子
            nodeList[last].leftChild = nodeList[last * 2 + 1];
            //右孩子
            if (arr.Length % 2 == 1) {
                nodeList[last].rightChild = nodeList[last * 2 + 2];
            }

            return nodeList;
        }

代碼實現二叉樹的先序遍歷,中序遍歷,後序遍歷:

先序遍歷:

/// <summary>
        /// 前序遍歷
        /// </summary>
        /// <param name="node"></param>
        static void preOrder(Node node) {
            if (node == null) return;
            System.Console.WriteLine(node.data+" ");
            preOrder(node.leftChild);
            preOrder(node.rightChild);
        }

中序遍歷:

/// <summary>
        /// 中序遍歷
        /// </summary>
        /// <param name="node"></param>
        static void inOrder(Node node) {
            if (node == null) return;
            inOrder(node.leftChild);
            System.Console.WriteLine(node.data+" ");
            inOrder(node.rightChild);
        }

後續遍歷:

/// <summary>
        /// 後序遍歷
        /// </summary>
        /// <param name="node"></param>
        static void postOrder(Node node) {
            if (node == null) return;
            postOrder(node.leftChild);
            postOrder(node.rightChild);
            System.Console.WriteLine(node.data+" ");
        }

Main:

int[] bArr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            List<Node> nodeList = createdBinTree(bArr);
            System.Console.WriteLine("先序遍歷");
            preOrder(nodeList[0]);
            System.Console.WriteLine("中序遍歷");
            inOrder(nodeList[0]);
            System.Console.WriteLine("後序遍歷");
            postOrder(nodeList[0]);

            System.Console.ReadKey();

結果:

二叉樹遍歷結果

代碼:

https://github.com/zhangcj/bTreegithub

相關文章
相關標籤/搜索