在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

解析LeetCode第226號題目:反轉二叉樹

jf_78858299 ? 來源:小風算法 ? 作者:小風算法 ? 2023-02-17 14:52 ? 次閱讀

今天給大家講解一道微軟一面的算法題,也是LeetCode第226號題目,反轉二叉樹,就像這樣:

圖片

簡單講就是把每個節點的左子樹和右子樹進行交換

顯然,這需要我們能夠遍歷該二叉樹。

那么遍歷二叉樹就有兩種經典的解法:深度優先遍歷,Deep First Search,簡稱DFS;另一個是廣度優先遍歷,Breadth First Search,簡稱BFS。

深度優先搜索

顧名思義,深度優先搜索是我總是優先訪問“ 節點的子節點的子節點 。。”,這是什么意思呢?對于給定的二叉樹,我們首先訪問節點4:

圖片

接下來訪問4的左子樹2:

圖片

再接下來依然訪問2的左子樹1:

圖片

1是葉子節點,其左右子樹都為空,因此返回上一個節點2,然后訪問其右子樹3,重復上述過程直到所有節點訪問完畢。

你會發現,這其實是一個遞歸過程:

圖片

深度優先搜索非常適合用遞歸代碼編寫。

回到這個題目,代碼就可以這樣寫:

TreeNode* invertTree(TreeNode* root) {
    // 如果是空節點,直接訪問
    if (root == nullptr) return nullptr;
    
    // 找到當前節點的左右字節點,并交換
    auto* left = root->left;
    auto* right = root->right;
    root->left = right;
    root->right = left;
    
    // 處理當前節點的左右子節點
    invertTree(left);
    invertTree(right);
    
    return root;
}

接下來我們看廣度優先搜索。

廣度優先搜索

個人認為廣度優先搜索相對來說更容易理解,通俗的講,廣度優先搜索是“ 先把同輩訪問完再訪問下一輩 ”,因此這一種“ 層級 ”遍歷方法,先是訪問第一層,然后是第二層。。直到最后一層,就像這樣:

圖片

在這里我們可以使用一個隊列,先把根節點4放入隊列中,然后從隊列依次取出節點,交換其左右字數,并將該節點的左右字數也放到隊列中,重復上述過程直到隊列為空,用代碼就是這樣實現:

TreeNode* invertTree(TreeNode* root) {
  if (root == nullptr) return nullptr;
  
  // 定義隊列,并把根節點放到隊列中
  queue q;
  q.push(root);
  
  while(!q.empty()) {
    // 從隊列中取出節點
    auto* t = q.front();
    q.pop();

    // 交換該節點的左右子樹
    auto* left = t->left;
    auto* right = t->right;
    t->left = right;
    t->right = left;
    
    // 如果該節點的左右子樹不空則放到隊列
    if (left) q.push(left);
    if (right) q.push(right);
  }
  return root;
}

廣度優先搜索與深度優先搜索不僅僅可以用在二叉樹中,這兩種遍歷方法有著極其廣泛的用途,當我們積攢足夠多的使用案例后將會系統總結這兩種遍歷方法。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微軟
    +關注

    關注

    4

    文章

    6600

    瀏覽量

    104114
  • 二叉樹
    +關注

    關注

    0

    文章

    74

    瀏覽量

    12335
  • BFS
    BFS
    +關注

    關注

    0

    文章

    9

    瀏覽量

    2174
收藏 人收藏

    評論

    相關推薦

    計算機二叉樹的問題

    各位大神,本人馬上要考計算機級了,那個二叉樹老是弄不明白,比如一個題目,一棵二叉樹共有25個節點,其中五個葉子節點,則度為1的節點數為?
    發表于 09-04 09:45

    基于二叉樹的時序電路測試序列設計

    為了實現時序電路狀態驗證和故障檢測,需要事先設計一個輸入測試序列。基于二叉樹節點和樹枝的特性,建立時序電路狀態二叉樹,按照電路二叉樹節點(狀態)與樹枝(輸入)的層次邏輯
    發表于 07-12 13:57 ?0次下載
    基于<b class='flag-5'>二叉樹</b>的時序電路測試序列設計

    二叉樹層次遍歷算法的驗證

    實現二叉樹的層次遍歷算法,并對用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”創建的二叉樹進行測試。
    發表于 11-28 01:05 ?2103次閱讀
    <b class='flag-5'>二叉樹</b>層次遍歷算法的驗證

    關于二叉樹一些數據結構和算法相關的題目

    最近總結了一些數據結構和算法相關的題目,這是第一篇文章,關于二叉樹的。
    的頭像 發表于 02-07 13:57 ?3209次閱讀

    詳解電源二叉樹到底是什么

    作為數據結構的基礎,分很多種,像 AVL 、紅黑二叉搜索....今天我想分享的是關于二叉樹
    的頭像 發表于 06-06 15:05 ?1w次閱讀
    詳解電源<b class='flag-5'>二叉樹</b>到底是什么

    二叉樹操作的相關知識和代碼詳解

    見的二叉樹操作作個總結: 前序遍歷,中序遍歷,后序遍歷; 層次遍歷; 求的結點數; 求的葉子數; 求的深度; 求二叉樹
    的頭像 發表于 12-12 11:04 ?2054次閱讀
    <b class='flag-5'>二叉樹</b>操作的相關知識和代碼詳解

    二叉樹的前序遍歷非遞歸實現

    我們之前說了二叉樹基礎及二叉的幾種遍歷方式及練習題,今天我們來看一下二叉樹的前序遍歷非遞歸實現。 前序遍歷的順序是, 對于中的某節點,先遍歷該節點,然后再遍歷其左子樹,最后遍歷其右子
    的頭像 發表于 05-28 13:59 ?1969次閱讀

    如何才能夠翻轉二叉樹

    有所收獲! 226.翻轉二叉樹題目地址:https://leetcode-cn.com/problems/invert-binary-tree/ 翻轉一棵
    的頭像 發表于 09-01 11:45 ?1759次閱讀

    C語言數據結構:什么是二叉樹

    完全二叉樹:完全二叉樹是效率很高的數據結構。對于深度為K,有n個節點的二叉樹,當且僅當每一個節點都與深度為K的滿二叉樹中編號從1至n的節點一一對應時,稱為完全
    的頭像 發表于 04-21 16:20 ?2524次閱讀

    怎么就能構造成二叉樹呢?

    一直跟著公眾學算法的錄友 應該知道,我在二叉樹:構造二叉樹登場!,已經講過,只有 中序與后序 和 中序和前序 可以確定一顆唯一的二叉樹。前序和后序是不能確定唯一的
    的頭像 發表于 07-14 11:20 ?1610次閱讀

    使用C語言代碼實現平衡二叉樹

    這篇博客主要總結平衡二叉樹,所以,二叉排序樹知識不會提及,但是會用到。
    的頭像 發表于 09-21 11:00 ?1103次閱讀

    二叉樹的代碼實現

    二叉樹的主要操作有遍歷,例如有先序遍歷、中序遍歷、后序遍歷。在遍歷之前,就是創建一棵二叉樹,當然,還需要有刪除二叉樹的算法。
    的頭像 發表于 01-18 10:41 ?1239次閱讀
    <b class='flag-5'>二叉樹</b>的代碼實現

    C++構建并復制二叉樹

    使用C++構建一個二叉樹并復制、輸出。
    的頭像 發表于 01-10 15:17 ?1031次閱讀
    C++構建并復制<b class='flag-5'>二叉樹</b>

    C++自定義二叉樹并輸出二叉樹圖形

    使用C++構建一個二叉樹并輸出。
    的頭像 發表于 01-10 16:29 ?1764次閱讀
    C++自定義<b class='flag-5'>二叉樹</b>并輸出<b class='flag-5'>二叉樹</b>圖形

    這么簡單的二叉樹算法都不會?

    這個題目leetcode572題,要求是這樣的:給定兩顆二叉樹A和B,判斷B是否是A的子樹。
    的頭像 發表于 08-29 11:19 ?862次閱讀
    這么簡單的<b class='flag-5'>二叉樹</b>算法都不會?
    主站蜘蛛池模板: semimi亚洲综合在线观看| 亚洲人成人77777网站| 大杳蕉伊人狼人久久一本线| 毛片大全高清免费| 黄色录像大全| 亚洲欧美卡通 动漫 丝袜| 欧美成人鲁丝片在线观看| se97se成人亚洲网站在线观看| 好爽好紧好大的免费视频国产 | 日本黄色站| 欧美一级视频在线| 久久天堂网| a级毛片免费观看网站| 天天久久综合网站| 国产精品网站在线进入| avtom影院永久转四虎入口| 欧美一卡2卡三卡4卡5卡免费观看| 99久久国产免费 - 99久久国产免费| 亚洲成人在线免费观看| 日本xxxx色视频在线观看免 | 天天舔天天摸| 女人张开腿 让男人桶视频| 国产免费私拍一区二区三区| 午夜在线观看免费高清在线播放 | 韩国三级床戏合集| 夜色成人| 国产精品久久1024| 亚洲免费二区三区| 香蕉视频网站在线播放| 青草国内精品视频在线观看| 国产精品综合色区在线观看| 天天干天天干| 欧美性极品高清| 永久网站色视频在线观看免费| 日日噜噜夜夜狠狠久久丁香| 国产主播在线看| 色日韩在线| 中文字幕va一区二区三区| 天堂ww| 国模吧在线视频| 欧美一级高清黄图片|