二叉树的遍历(非递归形式)

来源:互联网 发布:mac 编译安装php5.6 编辑:程序博客网 时间:2024/06/05 11:32

前序遍历

    //非递归        vector<int>result;        vector<int> preorderTraversal(TreeNode *root) {        // write your code here        if (root == NULL)        {            return result;        }        stack<TreeNode *>Stack;        Stack.push(root);        while(!Stack.empty())        {            TreeNode *topNode = Stack.top();            Stack.pop();            result.push_back(topNode->val);            if(topNode->right != NULL)            {                Stack.push(topNode->right);            }            if(topNode->left != NULL)            {                Stack.push(topNode->left);            }        }        return result;    }
中序遍历

    //非递归操作    vector<int>result;    vector<int> inorderTraversal(TreeNode *root) {        // write your code here        stack<TreeNode *>Stack;        TreeNode *cur = root;        while(cur != NULL || !Stack.empty())        {            while(cur != NULL)            {                Stack.push(cur);                cur = cur->left;            }            cur = Stack.top();            Stack.pop();            result.push_back(cur->val);            cur = cur->right;        }        return result;    }
后序遍历

    //非递归    vector<int>result;    vector<int> postorderTraversal(TreeNode *root) {        // write your code here        if (root == NULL)        {            return result;        }        stack<TreeNode *>Stack;        Stack.push(root);        while(!Stack.empty())        {            TreeNode *topNode = Stack.top();            result.push_back(topNode->val);            Stack.pop();            if (topNode->left)            {                Stack.push(topNode->left);            }            if (topNode->right)            {                Stack.push(topNode->right);            }        }        reverse(result.begin(),result.end());        return result;    }




原创粉丝点击