精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

二叉樹的遞歸遍歷,套路都在這里

開發 前端
本篇將介紹前后中序的遞歸寫法,一些同學可能會感覺很簡單,其實不然,我們要通過簡單題目把方法論確定下來,有了方法論,后面才能應付復雜的遞歸。

[[410967]]

二叉樹的遞歸遍歷

這次我們要好好談一談遞歸,為什么很多同學看遞歸算法都是“一看就會,一寫就廢”。

主要是對遞歸不成體系,沒有方法論,每次寫遞歸算法 ,都是靠玄學來寫代碼,代碼能不能編過都靠運氣。

本篇將介紹前后中序的遞歸寫法,一些同學可能會感覺很簡單,其實不然,我們要通過簡單題目把方法論確定下來,有了方法論,后面才能應付復雜的遞歸。

這里幫助大家確定下來遞歸算法的三個要素。每次寫遞歸,都按照這三要素來寫,可以保證大家寫出正確的遞歸算法!

確定遞歸函數的參數和返回值:確定哪些參數是遞歸的過程中需要處理的,那么就在遞歸函數里加上這個參數, 并且還要明確每次遞歸的返回值是什么進而確定遞歸函數的返回類型。

確定終止條件:寫完了遞歸算法, 運行的時候,經常會遇到棧溢出的錯誤,就是沒寫終止條件或者終止條件寫的不對,操作系統也是用一個棧的結構來保存每一層遞歸的信息,如果遞歸沒有終止,操作系統的內存棧必然就會溢出。

確定單層遞歸的邏輯:確定每一層遞歸需要處理的信息。在這里也就會重復調用自己來實現遞歸的過程。

好了,我們確認了遞歸的三要素,接下來就來練練手:

以下以前序遍歷為例:

確定遞歸函數的參數和返回值:因為要打印出前序遍歷節點的數值,所以參數里需要傳入vector在放節點的數值,除了這一點就不需要在處理什么數據了也不需要有返回值,所以遞歸函數返回類型就是void,代碼如下:

  1. void traversal(TreeNode* cur, vector<int>& vec) 

確定終止條件:在遞歸的過程中,如何算是遞歸結束了呢,當然是當前遍歷的節點是空了,那么本層遞歸就要要結束了,所以如果當前遍歷的這個節點是空,就直接return,代碼如下:

  1. if (cur == NULLreturn

確定單層遞歸的邏輯:前序遍歷是中左右的循序,所以在單層遞歸的邏輯,是要先取中節點的數值,代碼如下:

  1. vec.push_back(cur->val);    // 中 
  2. traversal(cur->left, vec);  // 左 
  3. traversal(cur->right, vec); // 右 

單層遞歸的邏輯就是按照中左右的順序來處理的,這樣二叉樹的前序遍歷,基本就寫完了,在看一下完整代碼:

前序遍歷:

  1. class Solution { 
  2. public
  3.     void traversal(TreeNode* cur, vector<int>& vec) { 
  4.         if (cur == NULLreturn
  5.         vec.push_back(cur->val);    // 中 
  6.         traversal(cur->left, vec);  // 左 
  7.         traversal(cur->right, vec); // 右 
  8.     } 
  9.     vector<int> preorderTraversal(TreeNode* root) { 
  10.         vector<int> result; 
  11.         traversal(root, result); 
  12.         return result; 
  13.     } 
  14. }; 

那么前序遍歷寫出來之后,中序和后序遍歷就不難理解了,代碼如下:

中序遍歷:

  1. void traversal(TreeNode* cur, vector<int>& vec) { 
  2.     if (cur == NULLreturn
  3.     traversal(cur->left, vec);  // 左 
  4.     vec.push_back(cur->val);    // 中 
  5.     traversal(cur->right, vec); // 右 

后序遍歷:

  1. void traversal(TreeNode* cur, vector<int>& vec) { 
  2.     if (cur == NULLreturn
  3.     traversal(cur->left, vec);  // 左 
  4.     traversal(cur->right, vec); // 右 
  5.     vec.push_back(cur->val);    // 中 

此時大家可以做一做leetcode上三道題目,分別是:

  • 144.二叉樹的前序遍歷
  • 145.二叉樹的后序遍歷
  • 94.二叉樹的中序遍歷

可能有同學感覺前后中序遍歷的遞歸太簡單了,要打迭代法(非遞歸),別急,我們明天打迭代法,打個通透!

其他語言版本

Java:

  1. // 前序遍歷·遞歸·LC144_二叉樹的前序遍歷 
  2. class Solution { 
  3.     ArrayList<Integer> preOrderReverse(TreeNode root) { 
  4.         ArrayList<Integer> result = new ArrayList<Integer>(); 
  5.         preOrder(root, result); 
  6.         return result; 
  7.     } 
  8.  
  9.     void preOrder(TreeNode root, ArrayList<Integer> result) { 
  10.         if (root == null) { 
  11.             return
  12.         } 
  13.         result.add(root.val);           // 注意這一句 
  14.         preOrder(root.left, result); 
  15.         preOrder(root.right, result); 
  16.     } 
  17. // 中序遍歷·遞歸·LC94_二叉樹的中序遍歷 
  18. class Solution { 
  19.     public List<Integer> inorderTraversal(TreeNode root) { 
  20.         List<Integer> res = new ArrayList<>(); 
  21.         inorder(root, res); 
  22.         return res; 
  23.     } 
  24.  
  25.     void inorder(TreeNode root, List<Integer> list) { 
  26.         if (root == null) { 
  27.             return
  28.         } 
  29.         inorder(root.left, list); 
  30.         list.add(root.val);             // 注意這一句 
  31.         inorder(root.right, list); 
  32.     } 
  33. // 后序遍歷·遞歸·LC145_二叉樹的后序遍歷 
  34. class Solution { 
  35.     public List<Integer> postorderTraversal(TreeNode root) { 
  36.         List<Integer> res = new ArrayList<>(); 
  37.         postorder(root, res); 
  38.         return res; 
  39.     } 
  40.  
  41.     void postorder(TreeNode root, List<Integer> list) { 
  42.         if (root == null) { 
  43.             return
  44.         } 
  45.         postorder(root.left, list); 
  46.         postorder(root.right, list); 
  47.         list.add(root.val);             // 注意這一句 
  48.     } 

Python:

  1. # 前序遍歷-遞歸-LC144_二叉樹的前序遍歷 
  2. class Solution: 
  3.     def preorderTraversal(self, root: TreeNode) -> List[int]: 
  4.         # 保存結果 
  5.         result = [] 
  6.          
  7.         def traversal(root: TreeNode): 
  8.             if root == None: 
  9.                 return 
  10.             result.append(root.val) # 前序 
  11.             traversal(root.left)    # 左 
  12.             traversal(root.right)   # 右 
  13.  
  14.         traversal(root) 
  15.         return result 
  16.  
  17. # 中序遍歷-遞歸-LC94_二叉樹的中序遍歷 
  18. class Solution: 
  19.     def inorderTraversal(self, root: TreeNode) -> List[int]: 
  20.         result = [] 
  21.  
  22.         def traversal(root: TreeNode): 
  23.             if root == None: 
  24.                 return 
  25.             traversal(root.left)    # 左 
  26.             result.append(root.val) # 中序 
  27.             traversal(root.right)   # 右 
  28.  
  29.         traversal(root) 
  30.         return result 
  31.  
  32. # 后序遍歷-遞歸-LC145_二叉樹的后序遍歷 
  33. class Solution: 
  34.     def postorderTraversal(self, root: TreeNode) -> List[int]: 
  35.         result = [] 
  36.  
  37.         def traversal(root: TreeNode): 
  38.             if root == None: 
  39.                 return 
  40.             traversal(root.left)    # 左 
  41.             traversal(root.right)   # 右 
  42.             result.append(root.val) # 后序 
  43.  
  44.         traversal(root) 
  45.         return result 

 【編輯推薦】

 

責任編輯:姜華 來源: 代碼隨想錄
相關推薦

2018-03-19 14:43:28

2020-04-27 07:05:58

二叉樹左子樹右子樹

2021-09-15 07:40:50

二叉樹數據結構算法

2022-10-26 23:58:02

二叉樹數組算法

2021-04-20 08:37:14

數據結構二叉樹

2021-07-16 08:57:31

迭代遍歷二叉樹

2023-05-08 15:57:16

二叉樹數據結構

2021-09-15 07:56:32

二叉樹層次遍歷

2025-05-16 09:34:10

2021-01-13 10:03:36

二叉樹層序遍歷層次遍歷

2009-08-11 13:29:57

C#二叉樹遍歷

2024-07-02 11:16:21

2017-10-24 14:57:58

AI人工智能機器學習

2018-04-26 16:15:02

數據庫MySQLMySQL 8.0

2021-07-01 09:00:00

安全數字化轉型滲透

2021-04-19 07:47:42

數據結構二叉樹Tree

2021-08-06 11:34:05

二叉樹遞歸回溯

2024-01-23 12:54:00

C++編程語言代碼

2013-07-15 16:35:55

二叉樹迭代器

2021-04-28 20:12:27

數據結構創建
點贊
收藏

51CTO技術棧公眾號

成人在线免费观看| 精品国产一区二区三区四| 日韩毛片免费看| 亚洲激情一二三区| 国模精品一区二区三区| 进去里视频在线观看| 久久久久蜜桃| 日韩精品视频在线观看免费| 手机免费av片| 麻豆成全视频免费观看在线看| 国产欧美日韩三区| 国产麻豆一区二区三区在线观看| 波多野结衣一二区| 国模一区二区三区| 国产一区二区三区视频免费| 国内av一区二区| 一区二区三区短视频| 中文字幕一区日韩精品欧美| 国产在线欧美日韩| 91成品人影院| 久久久久91| 欧美极品少妇全裸体| 亚洲aaa视频| 色天下一区二区三区| 91精品国产综合久久小美女| 免费看欧美黑人毛片| 蜜桃视频网站在线| 国产三级一区二区三区| 国内一区在线| 成人激情四射网| 久草热8精品视频在线观看| 欧美性受xxxx黑人猛交| 久久黄色小视频| 亚洲中无吗在线| 一级做a爰片久久毛片美女图片| aaa黄色大片| 在线日韩三级| 欧美日韩国产高清一区二区 | 白丝校花扒腿让我c| 99久久伊人| 色噜噜夜夜夜综合网| 日韩免费一级视频| av手机免费在线观看| 亚洲精品国产一区二区三区四区在线| 伊人久久青草| 91美女视频在线| 欧美国产精品v| 日本一区视频在线| 国产裸舞福利在线视频合集| 久久青草国产手机看片福利盒子| 精品欧美一区二区在线观看视频 | 久久久久久久久久久久久国产| 98在线视频| 中文字幕第一区综合| 日本一区二区在线视频| 国产视频三级在线观看播放| 久久九九全国免费| 免费久久99精品国产自| 青青草超碰在线| 久久综合色8888| 欧美日韩国产精品一卡| 奇米影视888狠狠狠777不卡| 91女厕偷拍女厕偷拍高清| 精品无码久久久久国产| 免费在线毛片| 国产精品三级电影| 一区二区欧美日韩| 91中文在线| 亚洲一卡二卡三卡四卡无卡久久| 欧美做受777cos| 欧美色图天堂| 五月激情丁香一区二区三区| 黄色免费视频大全| 麻豆精品蜜桃| 51精品视频一区二区三区| 久久久久亚洲av片无码v| 99a精品视频在线观看| 亚洲精品97久久| 先锋影音av在线| 天天做综合网| 久久久免费av| 精品无码一区二区三区的天堂| 青草国产精品久久久久久| 91老司机在线| 色呦呦中文字幕| 国产欧美日本一区二区三区| 日本老太婆做爰视频| 国产亚洲成av人片在线观看| 欧洲国内综合视频| 日本一二三区在线| 欧美亚洲色图校园春色| 伊人激情综合网| 久久久综合久久| 国产欧美69| 91精品久久久久久久久久久| 国产精品一区二区人人爽| 不卡高清视频专区| 日本一区二区三区视频免费看| 久久精品视频观看| 亚洲成a人v欧美综合天堂下载 | 国产制服丝袜一区| 久久久水蜜桃| 新版中文在线官网| 色婷婷精品大在线视频| 亚洲911精品成人18网站| 欧美人成在线观看ccc36| 在线观看日韩欧美| 在线观看免费国产视频| 精品一二线国产| 久久99精品久久久久久秒播放器| 免费av网站在线看| 91久久精品一区二区| 在线播放av网址| 日韩综合精品| 欧美中在线观看| 亚洲成熟女性毛茸茸| 成人性生交大片免费看网站| 中文字幕不卡在线观看| 成年人午夜免费视频| 成人自拍视频| 伊人伊成久久人综合网小说| 精品91久久久| 国产69精品久久久久毛片| 亚洲激情一区二区| 综合日韩av| 亚洲精品白浆高清久久久久久| www.com.av| 日本不卡中文字幕| 日本一区二区三区视频免费看 | 亚洲国产成人tv| 91丝袜超薄交口足| 91麻豆国产自产在线观看亚洲| 日本久久久a级免费| 熟妇人妻中文av无码| 一区二区三区四区不卡在线| www.超碰97.com| 日韩美女一区二区三区在线观看| 国产成人亚洲精品| 欧美xxx.com| 高潮白浆女日韩av免费看| 亚洲v在线观看| 国内精品美女在线观看| 99国产超薄丝袜足j在线观看 | 亚洲成人资源网| 午夜视频在线免费看| 影音先锋日韩精品| 91在线免费观看网站| 免费黄网站在线播放| 欧美人妇做爰xxxⅹ性高电影| 日本少妇xxxxx| 日韩高清一区二区| 日韩偷拍一区二区| h1515四虎成人| 中文字幕日韩精品在线观看| 在线观看国产一区二区三区| 国产精品免费久久久久| 久久久精品高清| 外国成人免费视频| 91久色国产| av老司机在线观看| 亚洲精品日韩在线| 香蕉污视频在线观看| 国产精品沙发午睡系列990531| 182午夜在线观看| 在线一区免费| 国模精品一区二区三区| 日韩欧美看国产| 色青青草原桃花久久综合| 国产免费一区二区三区免费视频| 一区二区视频在线| 成人免费毛片日本片视频| 日韩高清不卡在线| 一区二区三区精品国产| 精品视频在线播放一区二区三区 | 欧美三级一区二区三区| 97精品久久久午夜一区二区三区| 日韩中文字幕组| 欧美高清视频手机在在线| 91福利视频导航| 一二三四视频在线中文| 亚洲欧美色婷婷| 国产又黄又爽视频| 午夜精品在线看| 国产精品久久久久久成人| 国产精品1区2区3区| 97在线播放视频| 国产精品久久久久久久久久10秀 | 欧美性xxxx| 日本爱爱小视频| 91亚洲国产成人精品一区二区三 | 国产亚洲欧美在线视频| 日韩免费av| 国内精品久久久久久久果冻传媒| 欧美va在线观看| 久久久久久久久国产精品| 成人亚洲综合天堂| 精品日韩99亚洲| 久久午夜鲁丝片| 亚洲图片欧美综合| 色撸撸在线视频| 99久久99精品久久久久久| 亚洲美女性囗交| 国产午夜精品一区二区三区欧美 | 国产精品精品软件男同| 99久久精品99国产精品| 91国内在线播放| 快she精品国产999| 日韩欧美精品免费| 久久综合国产| 欧美主播一区二区三区美女 久久精品人| 激情中国色综合| 奇米4444一区二区三区| 污污视频在线| 美女精品视频一区| 国产在线视频网站| 日韩av影片在线观看| 99久久久久成人国产免费| 欧美在线免费视屏| 99热国产在线观看| 亚洲成人1区2区| 欧美三级免费看| |精品福利一区二区三区| 欧美狂猛xxxxx乱大交3| 成人av一区二区三区| 久久综合在线观看| 麻豆一区二区三| 亚洲天堂av线| 玖玖视频精品| 好男人www社区| 视频一区中文字幕| 大肉大捧一进一出好爽动态图| 影音先锋日韩资源| 日韩成人手机在线| 欧美一区亚洲| 4444在线观看| 女人香蕉久久**毛片精品| 制服诱惑一区| 亚洲色图88| 欧美xxxx吸乳| 午夜久久一区| 男人添女荫道口喷水视频| 欧美日韩福利| 女人帮男人橹视频播放| 亚洲天堂男人| 日本在线xxx| 香蕉久久国产| 欧美xxxxx在线视频| 丝袜亚洲精品中文字幕一区| 久久国产色av免费观看| 日韩电影在线看| 日本a√在线观看| 久久精品国产亚洲一区二区三区| 波多结衣在线观看| 久久99久久99精品免视看婷婷| 8x8x成人免费视频| 国产精品自拍在线| 一级黄色电影片| 99久久久无码国产精品| 毛片网站免费观看| 国产精品五月天| 五月天av网站| 亚洲一区二区三区视频在线| 国产在线视频二区| 狠狠躁夜夜躁人人躁婷婷91| 国产一区二区视频网站| 欧美日韩成人一区| www.黄色小说.com| 亚洲精品久久久久中文字幕欢迎你| 天堂中文在线8| 中文字幕v亚洲ⅴv天堂| 免费av在线| 午夜欧美不卡精品aaaaa| 午夜不卡影院| 国产日韩在线看| 91夜夜蜜桃臀一区二区三区| 国产精品亚洲不卡a| 国产伦精品一区二区三区千人斩| 一区二区三区在线观看www| 欧美久久久久| 999精品网站| 国产伦理精品不卡| 国产夫妻性爱视频| 成人欧美一区二区三区白人| 精品一级少妇久久久久久久| 色视频成人在线观看免| 国产99久一区二区三区a片| 日韩精品一区二区三区第95| 久久免费看视频| 久久精品国产免费观看| jizzjizz中国精品麻豆| 国产精品啪视频| 国产精品三p一区二区| 日本在线播放不卡| 亚洲区欧美区| 好男人www社区| 99精品热视频| 一区二区国产精品精华液| 午夜精品福利一区二区三区av| 在线免费观看中文字幕| 日韩精品极品视频免费观看| 久久国产精品一区| 国产福利成人在线| 97久久综合区小说区图片区| 亚洲人体一区| 久久精品毛片| 婷婷五月精品中文字幕| 国产精品久久久久影院老司| 在线天堂中文字幕| 欧美一区二区三区精品| 国产在线一二三| 45www国产精品网站| 久久在线观看| 一级二级三级欧美| 三级成人在线视频| 免费看毛片的网站| 亚洲免费色视频| 亚洲永久精品视频| 亚洲视频一区二区| 操人在线观看| 国产精品欧美久久| 欧美在线精品一区| 色啦啦av综合| 国产精品久久久久毛片软件| 日本一本在线观看| 亚洲女人被黑人巨大进入| 黄视频免费在线看| 99一区二区三区| 欧美在线三区| 国产黄色一区二区三区| 自拍偷拍亚洲综合| 伊人久久一区二区| 国产一区二区三区高清在线观看| 都市激情亚洲一区| 欧美日韩成人一区二区三区| 亚洲欧美日韩国产综合精品二区| xxxx黄色片| 精品久久中文字幕| 天堂成人在线| 欧美性视频在线| 国产麻豆精品久久| 欧美黄色一级片视频| 久久精品亚洲麻豆av一区二区| 国产毛片aaa| 亚洲人成电影在线播放| 日韩免费福利视频| 日韩欧美亚洲日产国| 青青草成人在线观看| 农村老熟妇乱子伦视频| 欧美理论片在线| av免费网站在线观看| 5g影院天天爽成人免费下载| 欧美先锋影音| 人妻av一区二区| 欧美日韩在线第一页| 欧美中文在线| 国产精品美腿一区在线看| 色中色综合网| 一级 黄 色 片一| 亚洲愉拍自拍另类高清精品| 六月婷婷综合网| 欧美伊久线香蕉线新在线| 欧美精美视频| 老司机午夜性大片| 亚洲一区二区在线观看视频| 日本黄色免费视频| 日本高清+成人网在线观看| 欧美色婷婷久久99精品红桃| 天天干天天色天天干| 一片黄亚洲嫩模| 青青草在线免费观看| 国产欧美日韩综合精品| 亚洲欧美伊人| 国产精品三级在线观看无码| 欧美日韩国产影片| 欧美亚洲系列| 日韩国产一区久久| 国产成人免费高清| 狠狠躁夜夜躁人人爽天天高潮| 亚洲午夜精品久久久久久性色| 欧美天堂一区| 欧美在线一区视频| 中文字幕av资源一区| 亚洲第一色网站| 国产成人一区二区三区| 亚洲一本二本| 日韩精品无码一区二区三区久久久| 欧美日韩亚洲综合| 不卡视频观看| 在线精品日韩| 久久这里只有精品首页| 国产精品人人妻人人爽| 5252色成人免费视频| 91精品国产乱码久久久久久久 | 国产精品igao| 亚洲图片欧美综合| 黄网址在线观看| 日韩精品久久一区| 成人免费va视频| 国产精品久久久久久久久久久久久久久久久久 | 精品色999|