note:後序遍歷在表示式上的應用
① 用遞迴的方式遍歷二叉樹
note:
遞迴的實現方式裡,函式的返回值需要為void型別,否則沒法進行。
所以我們需要設定乙個help函式來完成遞迴。
後序遍歷
/**
* definition for a binary tree node.
* struct treenode
* };
*/class solution
void helper(treenode *pnode , vector&node_ids)
else
}};
前序遍歷/**
* definition for a binary tree node.
* struct treenode
* };
*/class solution
void helper(treenode *pnode , vector&node_ids)
else
}};
中序遍歷/**
* definition for a binary tree node.
* struct treenode
* };
*/class solution
void helper(treenode *pnode , vector&node_ids)
else
}};
② 用非遞迴的方式遍歷二叉樹
用遞迴方式實現的問題都可以用非遞迴方法實現。
遞迴的本質就是利用函式棧來儲存資訊。
用自己申請的資料結構來代替函式棧,可以實現同樣的功能。
①使用棧實現前序遍歷:
申請乙個棧stack,頭結點入棧。
棧頂元素出棧,出棧元素的右節點和左節點依次入棧。
重複第二步,直到棧為空
/**
* definition for a binary tree node.
* struct treenode
* };
*/class solution
else
}return orders;
}};
②使用棧實現中序遍歷:
申請乙個新的棧stack,定義乙個變數 cur = root 節點
cur入棧
令 cur = cur.left,重複步驟2,直到cur = null
stack.pop(); 出棧的節點記為 node,輸出 node.val
令 cur = node.right 重複2,3
struct treenode
};class solution
else}}
return inorder;
}};
其實就是逐層遍歷樹的結構
廣度優先搜尋一種廣泛運用在樹或圖這類資料結構中,遍歷或搜尋的演算法。
該演算法從乙個根節點開始,首先訪問節點本身。
然後遍歷它的相鄰節點,其次遍歷它的二級鄰節點、**鄰節點,以此類推。
當我們在樹中進行廣度優先搜尋時,我們訪問的節點的順序是按照層序遍歷順序的。
實現有兩種模板
以層為單位輸出
以節點為單位輸出
按層為單位過程
頭節點入隊
如果佇列不為空,取到佇列的元素個數,得知上乙個迴圈加入佇列的元素個數,也就是上一層的元素個數。for迴圈令上一層的元素出佇列,並把其左右子樹入隊。
核心:就是 while 迴圈裡面套乙個 for 迴圈。..
.
struct treenode
};class solution
ans.push_back(cur);
}return ans;
}};
LeetCode 初級演算法 樹 二叉樹的層次遍歷
給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回其層次遍歷結果 3 9,20 15,7 一開始的解法是,先層次遍歷把所有的樹節點存放進乙個二維list中,然後在做一次巢狀迴圈將每個節點的...
leetcode 二叉樹 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3 方法一 遞迴 思路 如果乙個樹的左子樹與右子樹映象對稱,則該樹是對稱的 兩個樹互為映象的...
LeetCode (二叉樹)反轉二叉樹
遞迴交換每乙個節點的左右子樹,重點在於訪問每乙個節點,然後交換左右子樹 definition for a binary tree node.struct treenode struct treenode inverttree struct treenode root 由於至少要講每乙個節點都訪問一次...