二叉樹的中序遍歷(leetcode 94)

2022-07-12 04:54:10 字數 777 閱讀 7224

給定乙個二叉樹,返回它的中序遍歷。

遞迴很簡單,這裡要求非遞迴,其實也不難(由於沒寫過寫了好久= =)。

大致思路就是,左兒子不空就一直走左兒子,空了就走右兒子。然後重複上述。很顯然,遞迴轉非遞迴肯定是要用到棧的(因為要回溯,後遍歷的節點是先輸出的)。

這裡有些實現細節:

具體可以看**,一目了然

我一開始還想用兩個指標,乙個指向父節點,乙個指向當前節點。後來發現父節點就是棧頂的元素= =

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/#include #include using namespace std;

class solution

// 沒有就該輸出

root = sta.top();

sta.pop();

ans.push_back(root->val);

// 然後看看有無右兒子

root = root->right;

} return ans;

}};

二叉樹中序遍歷

訪問根結點的的左子樹,訪問根結點和訪問根結點的右子樹依次記作 l,d r 中序遍歷 ldr 演算法 遍歷根結點的左子樹,訪問根結點 遍歷根結點的右子樹 對於上面的圖,我們假定只有a,b,c三個結點,則中序遍歷結果為 b a c 採用上節 二叉樹鏈式儲存和前序遍歷 中的遞迴推演 db a c d b ...

二叉樹中序遍歷

二叉樹中序遍歷 非遞迴版本的中序遍歷用棧來實現。乙個元素出現在棧頂一次,這一次會被處理並出棧。trick 用乙個指標去記錄當前節點cur,如果cur left左側還未遍歷,就會將cur入棧並訪問cur left。一行很重要的 是cur cur right,這一句之後如果cur null,則說明棧頂元...

二叉樹先序遍歷和中序遍歷確定二叉樹

由於希望得到一顆二叉樹,所以返回值型別是乙個指向根節點的指標 表示得到了一顆二叉樹 btnode creatbt char pre,char int,int l1,int r1,int l2,int r2 引數列表有傳入的先序序列和後序序列和他們的開頭和結尾 由於是遞迴函式,先寫乙個遞迴出口,顯然是...