<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ## 遍歷二叉樹 構建一棵樹后,我們希望遍歷它,有四種遍歷方法: 1. 先序遍歷:先訪問根節點,再訪問左子樹,最后訪問右子樹。 2. 后序遍歷:先訪問左子樹,再訪問右子樹,最后訪問根節點。 3. 中序遍歷:先訪問左子樹,再訪問根節點,最后訪問右子樹。 4. 層次遍歷:每一層從左到右訪問每一個節點。 先創建數數據 ``` // 二叉樹 type TreeNode struct { Data string // 節點用來存放數據 Left *TreeNode // 左子樹 Right *TreeNode // 右字樹 } func main() { t := &TreeNode{Data: "A"} t.Left = &TreeNode{Data: "B"} t.Right = &TreeNode{Data: "C"} t.Left.Left = &TreeNode{Data: "D"} t.Left.Right = &TreeNode{Data: "E"} t.Right.Left = &TreeNode{Data: "F"} } ``` ![](https://img.kancloud.cn/db/f6/dbf62c1ca8b612aa1fa7a2172b757f8d_532x226.png) ### 先序遍歷 先訪問根節點,再訪問左子樹,最后訪問右子樹 方式一:前序遞歸遍歷 ``` func preorderTraversal(root *TreeNode) { if root==nil{ return } // 先訪問根再訪問左右 fmt.Println(root.Data) preorderTraversal(root.Left) preorderTraversal(root.Right) } // 輸出 // A B D E C F ``` - 盡可能深的搜索樹的分支 - 這種算法不會根據圖的結構等信息調整執行策略 ![](https://img.kancloud.cn/55/8f/558f8f6c4beebb192291395a0487f67d_428x219.png) ### 中序遍歷 先訪問左子樹,再訪問根節點,最后訪問右子樹 ``` func inorderTraversal(tree *TreeNode) { if tree == nil { return } // 先打印左子樹 inorderTraversal(tree.Left) // 再打印根節點 fmt.Print(tree.Data, " ") // 再打印右字樹 inorderTraversal(tree.Right) } // 輸出 // D B E A F C ``` ![](https://img.kancloud.cn/48/d7/48d736c90d47b2f9ac36fc5d8765e111_418x202.png) ### 后序遍歷 先訪問左子樹,再訪問右子樹,最后訪問根節點 ``` func inorderTraversal(tree *TreeNode) { if tree == nil { return } // 先打印左子樹 inorderTraversal(tree.Left) // 再打印右字樹 inorderTraversal(tree.Right) fmt.Print(tree.Data, " ") } // 輸出 // D E B F C A ``` ![](https://img.kancloud.cn/48/53/4853dfd00e5092ba35189363927e5e70_400x213.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看