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

二叉樹的遞歸和非遞歸的遍歷算法模板

開發 前端 算法
二叉樹的四種遍歷方式,前中后加上層序遍歷。對于二叉樹的前中后層序遍歷,每種遍歷都可以遞歸和循環兩種實現方法,且每種遍歷的遞歸實現都比循環實現要簡潔。

[[423968]]

刷Leetcode,需要知道一定的算法模板,本次先總結下二叉樹的遞歸和非遞歸的遍歷算法模板。

二叉樹的四種遍歷方式,前中后加上層序遍歷。對于二叉樹的前中后層序遍歷,每種遍歷都可以遞歸和循環兩種實現方法,且每種遍歷的遞歸實現都比循環實現要簡潔。下面做一個小結,看了《代碼隨想錄》哈工大大佬的刷題指南,深受啟發,因,下面代碼有一定來源《代碼隨想錄》。

遞歸

下面偽代碼是二叉樹遍歷的遞歸算法模板,順序是中左右,也就是前序遍歷,改變中左右三行代碼的順序,前中后序三種遞歸遍歷輕松解決。

  1. def preorderTraversal(root: TreeNode) -> List[int]: 
  2.     res = [] 
  3.     def help(root): 
  4.         if not root: return 
  5.         res.append(root.val) # 中 
  6.         help(root.left) # 左 
  7.         help(root.right) # 右 
  8.     help(root) 
  9.     return res 

對此也提供C++代碼,遞歸算法模板一定要加上終止條件,不然一入遞歸深似海,從此offer是路人,來源代碼隨想錄。

  1. void help(TreeNode * root , vector<int> &res) { 
  2.     if (root == nullptr) { 
  3.         return
  4.     } 
  5.     res.push_back(root->val); // 中 
  6.     help(root->left,res); // 左 
  7.     help(root->right,res); //右 
  8.  
  9.  
  10. vector<int> preorderTraversal(TreeNode* root) { 
  11.     vector<int> res; 
  12.     help(root,res); 
  13.     return res; 

迭代

迭代遍歷二叉樹的比遞歸難度加大,其實使用了一個棧的數據結構,《代碼隨想錄》非常巧妙的使用空指針來作標記,原理是將處理的節點放入棧之后,緊接著放入一個空指針作為標記。

由于棧是先進后出,所以前序遍歷的順序中左右,在加到棧中,需要反過來進行添加,每添加一個元素在后面添加一個空指針,在Python中也可以使用None來代替。

下面是具體的偽代碼,至于中序和后序遍歷,改下向棧中添加節點的順序即可。

  1. def preorderTraversal(root: TreeNode) -> List[int]: 
  2.       result = [] 
  3.       st= [] 
  4.       # 1、判斷root 
  5.       if root: 
  6.           st.append(root) 
  7.       while st: 
  8.           node = st.pop() 
  9.           if node != None: 
  10.               # 右左中 添加到棧中,然后中左右拿出 
  11.               if node.right: #右 
  12.                   st.append(node.right
  13.               if node.left: #左 
  14.                   st.append(node.left
  15.               st.append(node) #中 
  16.               # 添加一個空指針 記錄節點 
  17.               st.append(None) 
  18.           else:  
  19.              # node是空指針,那么下一個就是加入的節點 
  20.               node = st.pop() 
  21.               result.append(node.val) 
  22.       return result 

下面是具體的C++代碼,由于C++中的stack中pop之后,沒有返回值,因此需要額外注意。

  1. vector<int> preorderTraversal(TreeNode* root) { 
  2.         vector<int>res; 
  3.         stack<TreeNode*> st; 
  4.         if (root != nullptr) st.push(root); 
  5.         while(!st.empty()){ 
  6.             TreeNode* node = st.top(); 
  7.             if(node != nullptr){ 
  8.                 st.pop(); 
  9.                 if(node->right) st.push(node->right); 
  10.                 if (node->left) st.push(node->left); 
  11.                 st.push(node); 
  12.                 st.push(NULL); 
  13.             }else
  14.                 // 需要額外注意下 
  15.                 st.pop(); 
  16.                 node = st.top(); 
  17.                 st.pop(); 
  18.                 res.push_back(node->val); 
  19.             } 
  20.         } 
  21.         return res; 
  22.      
  23.     } 

層次遍歷

其實,樹的遍歷也分為兩種,分別是深度優先遍歷和廣度優先遍歷。關于樹的不同深度優先遍歷(前序,中序和后序遍歷)就是遞歸和非遞歸的寫法。廣度優先遍歷在樹中,就是層次遍歷。

在二叉樹的層級遍歷中,我們需要用到隊列這個數據結構,幫助我們完成遍歷。

在Python偽代碼中,

  1. def levelOrder(root: TreeNode) -> List[List[int]]: 
  2.  # 1、判斷root 
  3.    if not root: 
  4.         return [] 
  5.     # 把root添加到quene 中 
  6.     quene = [root] 
  7.     out_list = [] 
  8.     while quene: 
  9.      # while 第一步就是求length  
  10.         length = len(queue)   
  11.         in_list = [] 
  12.         for _ in range(length): 
  13.          # 在C++中,這里需要兩行 
  14.             curnode = queue.pop(0)  # (默認移除列表最后一個元素)這里需要移除隊列最頭上的那個 
  15.             in_list.append(curnode.val) 
  16.             if curnode.left: queue.append(curnode.left
  17.             if curnode.right: queue.append(curnode.right
  18.         out_list.append(in_list) 
  19.     return out_list 

通過上面的Python偽代碼,進行書寫更高效的C++代碼。

  1. class Solution { 
  2. public
  3.     vector<vector<int>> levelOrder(TreeNode* root) { 
  4.         vector<vector<int>> res; 
  5.         queue<TreeNode*> que; 
  6.         // 判斷  root 
  7.         if (root != nullptr) que.push(root); 
  8.         while(!que.empty()) { 
  9.              // 開始先求隊列的長度 
  10.             int size = que.size(); 
  11.             vector<int> vec; 
  12.             // 迭代添加節點元素 
  13.             for (int i = 0 ; i<size; i++){ 
  14.                 TreeNode* node = que.front(); 
  15.                 que.pop(); 
  16.                 vec.push_back(node->val); 
  17.                 if (node->left) que.push(node->left); 
  18.                 if (node->right) que.push(node->right); 
  19.             } 
  20.             res.push_back(vec); 
  21.         } 
  22.         return res; 
  23.     } 
  24. }; 

上述為樹的遍歷模板。其實本質上也是深度優先遍歷與廣度優先遍歷的算法模板,許多其它操作都是建立在樹遍歷操作的基礎之上,因此掌握樹的所有遍歷方法,等于解決了一半樹的題目。

 

責任編輯:姜華 來源: Python之王
相關推薦

2021-07-13 11:32:41

二叉樹數據結構算法

2021-09-15 07:56:32

二叉樹層次遍歷

2020-04-27 07:05:58

二叉樹左子樹右子樹

2013-07-15 16:35:55

二叉樹迭代器

2021-08-06 11:34:05

二叉樹遞歸回溯

2022-10-26 23:58:02

二叉樹數組算法

2021-04-20 08:37:14

數據結構二叉樹

2009-08-11 13:29:57

C#二叉樹遍歷

2021-01-13 10:03:36

二叉樹層序遍歷層次遍歷

2023-05-08 15:57:16

二叉樹數據結構

2021-09-29 10:19:00

算法平衡二叉樹

2020-09-23 18:25:40

算法二叉樹多叉樹

2020-12-22 08:56:51

JavaScript數據結構前端

2021-09-28 06:28:51

二叉樹公共祖先

2020-11-10 09:52:16

遞歸算法代碼

2021-04-19 07:47:42

數據結構二叉樹Tree

2021-08-27 11:36:44

二叉樹回溯節點

2021-04-28 20:12:27

數據結構創建

2021-09-16 18:28:02

二叉樹遍歷遞歸

2021-03-22 08:23:29

LeetCode二叉樹節點
點贊
收藏

51CTO技術棧公眾號

午夜激情视频在线观看| 国产三级精品三级观看| 天堂网在线最新版www中文网| 国产成人99久久亚洲综合精品| 最新的欧美黄色| 岛国av免费在线| 日本色护士高潮视频在线观看| 成人午夜碰碰视频| 国产91精品最新在线播放| xxxxx99| 国产精品欧美一区二区三区不卡 | 欧美体内she精视频在线观看| 欧美成人官网二区| www.四虎成人| 羞羞的视频在线看| 国产日韩精品一区| 97伦理在线四区| 波多野结衣电影在线播放| 五月精品视频| 国产丝袜一区二区| 亚洲一级片免费观看| 成人福利av| 一区二区三区欧美在线观看| 久久人人九九| 国产av无码专区亚洲a∨毛片| 先锋亚洲精品| 欧美国产日韩精品| 国产视频不卡在线| 亚洲 小说区 图片区| 国产又粗又猛又爽又黄av| 久久久久久免费观看| 欧美三级午夜理伦三级在线观看| 欧美性受xxxx黑人xyx性爽| 亚洲色成人www永久在线观看| 高清日韩av电影| 成人a免费在线看| 91久久久久久久久久| 丰满少妇xoxoxo视频| 激情91久久| 久久亚洲精品成人| 少妇精品无码一区二区免费视频| 国产精品白丝av嫩草影院| 欧美浪妇xxxx高跟鞋交| 免费黄色特级片| free性m.freesex欧美| 最新国产成人在线观看| 区一区二区三区中文字幕| 刘亦菲毛片一区二区三区| 麻豆精品一二三| 国产成人精品免高潮在线观看| 国产大片中文字幕在线观看| 在线中文一区| www.亚洲天堂| a级黄色免费视频| 九九视频精品全部免费播放| 亚洲高清在线观看| 老司机av网站| 亚洲国产视频二区| 日韩午夜三级在线| 久久发布国产伦子伦精品| 精品国模一区二区三区| 一本大道av一区二区在线播放| 99视频在线免费播放| www中文字幕在线观看| 亚洲在线观看免费视频| 777久久精品一区二区三区无码| 无遮挡的视频在线观看| 国产精品伦理在线| 致1999电视剧免费观看策驰影院| av国产在线观看| 欧美国产欧美综合| 亚洲午夜高清视频| 老司机免费在线视频| 日韩一区在线看| 伊人网在线免费| 免费av不卡在线观看| 亚洲成人在线网站| 男人日女人下面视频| 少妇视频一区| 91福利小视频| 色呦色呦色精品| 九色精品蝌蚪| 亚洲国产精品国自产拍av秋霞| 一边摸一边做爽的视频17国产 | 97超级碰碰| 亚洲国产www| gogogo免费视频观看亚洲一| 精品国产第一页| 国产在线超碰| 综合久久久久久| 亚洲国产精品无码观看久久| 自拍视频在线看| 欧美亚州韩日在线看免费版国语版| 中文字幕永久视频| 精品国产亚洲一区二区三区大结局| 日韩写真欧美这视频| 精品人妻一区二区三区日产乱码卜| 国产成人三级| 久久亚洲电影天堂| 精品免费囯产一区二区三区 | 成人免费视频国产免费麻豆| 99久久精品情趣| 日韩精品在在线一区二区中文| 免费看美女视频在线网站| 亚洲综合男人的天堂| 久久精品国产精品亚洲色婷婷| 成人看片网页| 欧美成人vr18sexvr| 加勒比一区二区| 91精品国产91久久久久久密臀| 性日韩欧美在线视频| 自拍偷拍精品视频| 成人听书哪个软件好| 日韩欧美第二区在线观看| 图片区小说区亚洲| 欧美一a一片一级一片| 99免费观看视频| 欧美色婷婷久久99精品红桃| 欧美激情图片区| 久久国产香蕉视频| 成人av午夜影院| 一区二区三区四区免费视频| 极品在线视频| 日韩一区二区三区四区| 亚洲av成人无码久久精品| 好看的亚洲午夜视频在线| 国产精品久久久久久久久粉嫩av | 免费看一级一片| 麻豆一区二区三| 久久久久久国产精品免费免费| а天堂中文在线官网| 91久久精品一区二区三| 中文字幕在线视频播放| 欧美va亚洲va日韩∨a综合色| 国产精品1234| 高h震动喷水双性1v1| 亚洲欧洲日韩在线| 国产精品视频黄色| 婷婷成人在线| 97国产真实伦对白精彩视频8| 一本到在线视频| 国产日产精品1区| 人妻夜夜添夜夜无码av| 麻豆视频久久| y97精品国产97久久久久久| 久久久久久无码精品大片| av在线一区二区| 国产91沈先生在线播放| 精品视频一区二区三区| 视频直播国产精品| 一级黄色大片免费| 中文幕一区二区三区久久蜜桃| 六月激情综合网| 日韩精品社区| 1769国产精品| 日韩在线无毛| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 男人的天堂在线视频免费观看 | 日本欧美黄色片| 99精品国产高清一区二区麻豆| 久久久成人精品视频| 中文字幕在线网站| 国产精品国产三级国产aⅴ入口| 91av俱乐部| 成人动漫免费在线观看| 国产精品69久久| 成年人视频免费在线观看| 在线观看免费视频综合| 亚洲а∨天堂久久精品2021| 日韩和欧美一区二区三区| 日本一区视频在线观看| 国产成人亚洲一区二区三区| 最近中文字幕日韩精品 | av在线小说| 亚洲精品av在线| 一区二区三区福利视频| 久久久久亚洲综合| 色www免费视频| 亚洲欧美伊人| 国内精品久久国产| 久久精品女人天堂av免费观看 | 国产伦精品一区二区| 大菠萝精品导航| 亚洲精品永久免费精品| 波多野结衣绝顶大高潮| 日韩一区欧美小说| 国产成人av无码精品| 免费看亚洲片| 爱爱爱视频网站| 涩爱av色老久久精品偷偷鲁| 午夜精品一区二区三区在线 | 久久中文字幕在线| 日本人妻丰满熟妇久久久久久| 欧美午夜激情在线| 男人天堂资源网| 国产精品123| 北条麻妃在线视频观看| 久久视频在线| 国产午夜精品在线| 成人av集中营| 欧美俄罗斯性视频| 国产在线视频网址| 日韩一级黄色片| 国产免费av一区| 亚洲美女区一区| 日本高清www| 国产在线不卡一卡二卡三卡四卡| 青青青国产在线观看| 欧美在线色图| 国产日韩精品一区观看| 日韩av黄色| 青青青国产精品一区二区| 国产午夜精品久久久久免费视| 日韩精品丝袜在线| 国产精品无码天天爽视频| 色综合久久精品| 日本天堂在线视频| 中文字幕中文字幕一区| ass精品国模裸体欣赏pics| 国产精品一区二区三区网站| 99草草国产熟女视频在线| 韩日成人在线| 永久免费看av| 国产探花一区在线观看| 国产一区二区三区免费不卡| 国产精品一区二区精品视频观看| 国产ts一区二区| 国产精品25p| 欧美大奶子在线| 黄网页在线观看| 中文欧美在线视频| 日产精品久久久久久久性色| 亚洲精品一区二区三区四区高清| 国产毛片久久久久| 欧美色成人综合| 波多野结衣电车| 色天天综合色天天久久| 国产成人精品网| 午夜激情久久久| 久久精品性爱视频| 亚洲综合区在线| 久久久久无码精品国产| 樱桃视频在线观看一区| 91免费公开视频| ...xxx性欧美| 神马久久精品综合| 国产精品成人免费精品自在线观看| 日本二区在线观看| 久久欧美一区二区| 黄色片视频免费观看| 成人高清视频免费观看| 古装做爰无遮挡三级聊斋艳谭| 国产欧美91| 日本手机在线视频| 黄色精品一区| 一区二区三区|亚洲午夜| 成人免费av| 先锋影音一区二区三区| 免费视频亚洲| 日韩在线导航| 国产成人三级| 欧美日韩亚洲一区二区三区在线观看 | 91亚洲精品久久久蜜桃借种| 日本欧美久久久久免费播放网| 18禁免费无码无遮挡不卡网站| av成人毛片| 国产 福利 在线| 亚洲韩日在线| 国产二区视频在线播放| 中文精品在线| av黄色在线网站| 青青草97国产精品免费观看| 久久久精品麻豆| 日韩国产欧美三级| 热久久久久久久久| 国产麻豆9l精品三级站| 黑人巨大猛交丰满少妇| 成人av在线一区二区| 国产呦小j女精品视频| 久久日一线二线三线suv| 国产福利短视频| 国产人成一区二区三区影院| 无码 人妻 在线 视频| 国产色综合久久| 波多野结衣在线网址| 亚洲欧美日韩一区| 天天天天天天天天操| 亚洲黄色av一区| 久久国产高清视频| 亚洲高清一区二区三区| 国产成人无码一区二区三区在线| 日韩欧美精品中文字幕| 一区二区三区午夜| 欧美va天堂va视频va在线| 十八禁一区二区三区| 综合网中文字幕| a视频在线观看| 9.1国产丝袜在线观看| 欧美xxxx性| 国产精品免费区二区三区观看| 人体久久天天| 日本免费黄色小视频| 国产精品一二| 成年人网站大全| 国模娜娜一区二区三区| 亚洲视频在线播放免费| 国产欧美精品在线观看| 欧美日韩在线观看成人| 狠狠做深爱婷婷久久综合一区| 免费在线观看av的网站| 亚洲第一中文字幕在线观看| 久久米奇亚洲| 久久福利视频网| av亚洲一区| 国产欧美一区二区视频| 热久久天天拍国产| 日韩欧美亚洲天堂| 国内一区二区视频| av无码av天天av天天爽| 一区二区三区欧美在线观看| 免费观看日批视频| 精品日产卡一卡二卡麻豆| 91在线看片| 777777777亚洲妇女| 亚洲天堂网站| 天天综合色天天综合色hd| 激情欧美日韩一区| www.色欧美| 中文字幕乱码亚洲精品一区| 国产亚洲精品久久久久久无几年桃 | 中文一区二区完整视频在线观看| 国产精品9191| 日韩精品一区二区三区蜜臀| 9色在线视频网站| 欧美激情高清视频| 国产成人免费视频网站视频社区| 欧美日韩天天操| 伊人天天综合| 国产亚洲色婷婷久久| 国产精品女同一区二区三区| 一级黄色在线观看| 亚洲精品美女久久久久| 污的网站在线观看| caoporen国产精品| 外国成人免费视频| 国产精品少妇在线视频| 国产亚洲一二三区| 久草视频在线观| 日韩电影第一页| 超碰97免费在线| 成人9ⅰ免费影视网站| 欧美日韩1区| 久久久久亚洲av片无码v| 国产精品乱人伦| 国产口爆吞精一区二区| 在线中文字幕日韩| 欧美成人三级| 亚洲亚洲精品三区日韩精品在线视频| 亚洲伊人网站| 亚洲v国产v欧美v久久久久久| 欧美日韩亚洲视频| 日本天堂在线| 国产v综合v亚洲欧美久久| 日韩成人av在线资源| 国产精品va在线观看无码| 成人黄色一级视频| 日韩精品一区三区| 亚洲精品日韩在线| 欧美电影h版| 日韩精品国内| 国产精品一品视频| 久草视频免费播放| 欧美一区二区三区影视| 黄在线免费观看| 4444kk亚洲人成电影在线| 日韩网站在线| 无码人妻aⅴ一区二区三区 | 日韩电影在线观看永久视频免费网站| 福利在线导航136| 麻豆成人在线播放| 亚洲一区日韩| 国产成人精品无码免费看夜聊软件| 色综合色综合色综合| аⅴ资源新版在线天堂| 亚洲最大成人网色| 亚洲午夜黄色| 91传媒理伦片在线观看| 91福利视频久久久久| 欧美成人三区| 久久精品日产第一区二区三区精品版| 在线亚洲自拍| 免费看91的网站| 精品国产一区二区亚洲人成毛片| 97人澡人人添人人爽欧美| 亚洲一区二区三区欧美| 国产毛片精品视频| 日韩欧美大片在线观看| x99av成人免费| av不卡一区二区| 一区二区三区 欧美|