94. Binary Tree Inorder Traversal二叉树的中序遍历
網(wǎng)址:https://leetcode.com/problems/binary-tree-inorder-traversal/
參考:https://leetcode.com/problems/binary-tree-inorder-traversal/solution/
二叉樹(shù)的遍歷一般有兩種辦法:遞歸、通過(guò)棧進(jìn)行迭代。此外,還有通過(guò)模擬線索二叉樹(shù)進(jìn)行遍歷的方式。
遞歸的代碼十分簡(jiǎn)單,這里就不再贅述。
中序遍歷迭代遍歷算法:
- 遇到一個(gè)節(jié)點(diǎn),就把它圧棧,并去遍歷它的左子樹(shù)
- 當(dāng)左子樹(shù)遍歷結(jié)束后,從棧頂彈出這個(gè)節(jié)點(diǎn)并訪問(wèn)它
- 然后再去中序遍歷它的右子樹(shù)
“線索”二叉樹(shù):
在這里我們不必為節(jié)點(diǎn)添加額外的指針域來(lái)表示節(jié)點(diǎn)的某種遍歷順序的前后位置分別是什么節(jié)點(diǎn),
而是通過(guò)以線索二叉樹(shù)的思想遍歷二叉樹(shù),把樹(shù)直接改造成可直接向下遍歷的結(jié)構(gòu)。
具體可見(jiàn):https://leetcode.com/problems/binary-tree-inorder-traversal/solution/
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<int> inorderTraversal(TreeNode* root) {vector<int> ans;TreeNode* temp = new TreeNode(0);// 因?yàn)槲覀儾粩嘧宺oot=root->right,所以判斷條件為root != NULLwhile(root != NULL){// root有左子樹(shù),就把root修改為左子樹(shù)的最右節(jié)點(diǎn)的右節(jié)點(diǎn)if(root->left){// 得到root左子樹(shù)的最右節(jié)點(diǎn)temp = root->left;while(temp->right != NULL){temp = temp->right;}// 把root修改為左子樹(shù)的最右節(jié)點(diǎn)的右節(jié)點(diǎn)temp->right = root;// 注意要把root節(jié)點(diǎn)的左節(jié)點(diǎn)置為NULL!// 在這之前先存下root的左節(jié)點(diǎn),然后修改root,進(jìn)行下一輪while循環(huán)temp = root->left;root->left = NULL;root = temp;}else{// root沒(méi)有左子樹(shù),說(shuō)明當(dāng)前節(jié)點(diǎn)是當(dāng)前樹(shù)中的最左節(jié)點(diǎn)// 根據(jù)中序遍歷的定義,把val存入ans,繼續(xù)while循環(huán)ans.push_back(root->val);root = root->right;}}return ans;} };?
轉(zhuǎn)載于:https://www.cnblogs.com/tornado549/p/10799742.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的94. Binary Tree Inorder Traversal二叉树的中序遍历的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: create-react-app 脚手架
- 下一篇: ECS是阿里云提供的什么服务