二叉树中序非递归遍历

简介: 二叉树中序非递归遍历二叉树中序非递归遍历
/**
 * 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) {
        stack<TreeNode*> stk;
        vector<int> out;
        TreeNode *tmp=root;
        if(!root) return out;
        while(!stk.empty()||tmp!=NULL){
            if(tmp){
                stk.push(tmp);
                tmp=tmp->left;
            }else{
                tmp=stk.top();
                stk.pop();
                out.push_back(tmp->val);
                tmp=tmp->right;
            }
        }
        return out;
    }
};
/*中序非递归遍历de算法思想:
根据中序遍历的顺序,对于任意一个结点,优先访问左孩子,再继续访问该左孩子的左孩子,然直到遇到左孩子结点为空的结点才停止访问,然后按照相同规则访问右子树。处理过程如下:
对于任意结点:
a。若左孩子不空,将tmp入栈,并将tmp的左孩子设置为新的tmp,
然后对当前的结点进行相同的操作;
b。若其左孩子(tmp)为空,则取栈顶元素并进行出栈操作,访问该
栈顶结点,然后对当前的tmp置为栈顶结点的右孩子
c。直到tmp为空并且栈为空的,则while循环结束
*/
相关文章
|
24天前
|
Python
二叉树前中后序遍历
这段内容是关于二叉树的前序、中序和后序遍历的Python实现。`Solution`类包含三个方法:`preorderTraversal`、`inorderTraversal`和`postorderTraversal`,分别返回二叉树节点值的前序、中序和后序遍历列表。每个方法都是递归的,遍历顺序为:前序(根-左-右)、中序(左-根-右)、后序(左-右-根)。
14 4
|
6月前
|
存储 C++
非递归遍历二叉树
非递归遍历二叉树
34 0
|
8月前
|
存储
线索化二叉树
线索化二叉树
36 0
二叉树的前序、中序和后序遍历
二叉树的前序、中序和后序遍历
二叉树的层次遍历
层次遍历就是即逐层地,从左到右访问所有节点
二叉树的层次遍历
|
JavaScript 前端开发 Java
二叉树的先序、中序、后序遍历
二叉树的先序、中序、后序遍历
106 0
二叉树的先序、中序、后序遍历
先序、中序、后序遍历确定唯一树
快速学习先序、中序、后序遍历确定唯一树
先序、中序、后序遍历确定唯一树
二叉树前序非递归遍历
二叉树前序非递归遍历 二叉树前序非递归遍历
90 0
二叉树层次遍历
二叉树层次遍历 二叉树层次遍历
90 0