成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

LeetCode 之 JavaScript 解答第94題 —— 二叉樹的中序遍歷

Jason / 1089人閱讀

摘要:小鹿題目二叉樹中序遍歷給定一個二叉樹,返回它的中序遍歷。通常遞歸的方法解決二叉樹的遍歷最方便不過,但是我還是喜歡增加點難度,用一般的迭代循環(huán)來實現(xiàn)。

Time:2019/4/25
Title:Binary Tree Inorder Traversal
Difficulty: Medium
Author:小鹿

題目:Binary Tree Inorder Traversal(二叉樹中序遍歷)

Given a binary tree, return the inorder traversal of its nodes" values.

給定一個二叉樹,返回它的中序?遍歷。

Example:

Input: [1,null,2,3]
   1
    
     2
    /
   3

Output: [1,3,2]

Follow up: Recursive solution is trivial, could you do it iteratively?

進階:?遞歸算法很簡單,你可以通過迭代算法完成嗎?
solve:
▉ 問題分析
1)二叉樹的前、中、后遍歷,首先明白前、中、后遍歷的順序是什么,對于二叉樹的中序遍歷來說,順序是左子樹節(jié)點 —> 根節(jié)點 —> 右子樹節(jié)點。

2)通常遞歸的方法解決二叉樹的遍歷最方便不過,但是我還是喜歡增加點難度,用一般的迭代循環(huán)來實現(xiàn)。

▉ 算法思路
遞歸法:

1)判斷當(dāng)前樹是否為空。

2)遞歸樹的左子樹結(jié)點。

3)輸出當(dāng)前結(jié)點的值。

4)遞歸樹的右子樹節(jié)點。

迭代循環(huán)法:

1)聲明一個棧,將樹的左子節(jié)點入棧。

2)每出棧一個結(jié)點,輸出當(dāng)前結(jié)點的值,且將該結(jié)點的右子樹進行遍歷打印,保證每個出棧的結(jié)點輸出值之后,再輸出上一個左子節(jié)點之前,將當(dāng)前結(jié)點的右子節(jié)點遍歷畢。

3)整棵樹遍歷完畢的終止條件就是當(dāng)前棧是否存在結(jié)點(樹的左子節(jié)點)。

▉ 遞歸實現(xiàn)
var inorderTraversal = function(root) {
    let arr = []
    const inorder = root =>{
        // 判斷當(dāng)前的結(jié)點是否為空
        if(root == null) return null;
        // 遞歸左子樹
        inorder(root.left)
        // 輸出結(jié)點值
        arr.push(root.val)
        // 遞歸右子樹
        inorder(root.right)
    }
    inorder(root)
    return arr
};
▉ 迭代實現(xiàn)
// 迭代實現(xiàn)二叉樹的中序遍歷
var inorderTraversal = function(root) {
    let stack = [];
    let result = [];

    while(true){
        // 判斷樹是否為空
        if(root == null) return result;

        // 先將樹的左子節(jié)點推入棧中
        while(root !== null){
            stack.push(root);
            root = root.left;
        }

        // 遍歷的終止條件
        if(stack.length !== 0){
            // 輸出棧中的結(jié)點
            let temp = stack.pop();
            result.push(temp.val);
            // 如果當(dāng)前存在右子節(jié)點,要先打印右子樹節(jié)點
            root = temp.right;
        }else{
            break;
        }
    }
    return result;
}
▉ 舉一反三
1)試著分別寫出前序遍歷、后序遍歷的遞歸實現(xiàn)和迭代實現(xiàn)代碼。


歡迎一起加入到 LeetCode 開源 Github 倉庫,可以向 me 提交您其他語言的代碼。在倉庫上堅持和小伙伴們一起打卡,共同完善我們的開源小倉庫!
Github:https://github.com/luxiangqia...
歡迎關(guān)注我個人公眾號:「一個不甘平凡的碼農(nóng)」,記錄了自己一路自學(xué)編程的故事。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104155.html

相關(guān)文章

  • LeetCode JavaScript 解答98 —— 驗證二叉搜索樹

    摘要:小鹿題目驗證二叉搜索樹給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。假設(shè)一個二叉搜索樹具有如下特征節(jié)點的左子樹只包含小于當(dāng)前節(jié)點的數(shù)。所有左子樹和右子樹自身必須也是二叉搜索樹。算法思路定義全局的變量,用來返回是否為二叉搜索樹。 Time:2019/4/24Title: Vaildata Binary Search TreeDifficulty: MediumAuthor: 小鹿 ...

    用戶84 評論0 收藏0
  • LeetCode 叉樹專項】二叉搜索樹中的中序后繼(285)

    摘要:解法二迭代中序遍歷分析作者二叉搜索樹的中序后繼是中序遍歷中當(dāng)前節(jié)點之后最小的節(jié)點。 文章目錄 1. 題目1.1 示例1.2 說明1.3 限制 2....

    ccj659 評論0 收藏0
  • 算法不定期更新(四)—— 從前序與中序遍歷序列構(gòu)造叉樹(2018-06-02)

    摘要:樹的前序,中序遍歷的結(jié)構(gòu)如下圖可以看出,通過前序遍歷可以確定根節(jié)點,再通過中序遍歷和根節(jié)點的位置可以確定出左子樹和右子樹。另外左子樹的前序遍歷和中序遍歷的順序跟在其父樹中的順序一樣。因此可以確定有一種遞歸解法。 從前序與中序遍歷序列構(gòu)造二叉樹 今天帶來的是Leetcode上的一個經(jīng)典題:從前序與中序遍歷序列構(gòu)造二叉樹原題干: /** Definition for a binary ...

    charles_paul 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<