1. 程式人生 > >Leetcode No. 94

Leetcode No. 94

存在 前序遍歷 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