Leetcode No. 94
阿新 • • 發佈:2019-05-08
存在 前序遍歷 nod 給定 int pop 邏輯 沒有 col
題目:
給定一個二叉樹,返回它的中序 遍歷。
示例:
輸入: [1,null,2,3] 1 2 / 3 輸出: [1,3,2]
解答:做出如下分析:
遍歷方式存在前序遍歷(一次)、中序遍歷(兩次)、後序遍歷(三次)。可以利用棧求解。
中序遍歷的邏輯:
【1】從根節點向左子節點遍歷。如果節點A的子節點不存在,那麽輸出節點A;
【2】返回A節點的父節點B,並輸出父節點B;
【3】定位到節點B的右子節點C,如果C沒有子節點,那麽輸出節點C;
【4】返回到節點B的父節點E,並輸出節點E;
【5】……
本程序的精妙處在於:首先遍歷到最底層的左節點;如果存在右節點,那麽再遍歷到右節點的最底層左節點;……;程序終止條件是根節點的右節點都已經輸出
//94 vector<int> inorderTraversal(TreeNode* root) { vector<int> res; stack<TreeNode*> s; TreeNode* p=root; while(p || !s.empty()) { while(p) { s.push(p); p=p->left; } p = s.top(); s.pop(); res.push_back(p->val); p=p->right; } return res; }//94
Leetcode No. 94