C++非递归遍历二叉树

 

C++非递归前序遍历

复制代码
/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;\images\20211111\392807_1636599059575\FE67E09E9BA5661A7AB9DF9638FB1FAC
 *  struct TreeNode *right;
 *  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return int整型vector
     */
    vector<int> preorderTraversal(TreeNode* root) {
        // write code here
        vector<int> listVal;
        stack<TreeNode*> treeStack;
        if(root == NULL) return listVal;
        treeStack.push(root);
        while(!treeStack.empty()){
            TreeNode *p = treeStack.top();
            treeStack.pop();
            listVal.push_back(p->val);
            cout<<p->val<<endl;
            //因为入栈的原因所以要右孩子先出战
            if(p->right != NULL){
                treeStack.push(p->right);
            }
            if(p->left != NULL){
                treeStack.push(p->left);
            }    
        }
        return listVal;
    }
};
复制代码

 

C++非递归中序遍历

复制代码
/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 *  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return int整型vector
     */
    vector<int> inorderTraversal(TreeNode* root) {
        // write code here
        vector<int> listVal;
        stack<TreeNode*> treeStack;
        if(root == NULL) return listVal;
        treeStack.push(root);
        TreeNode *p = root;
        while(!treeStack.empty()){
            if(p->left == NULL){
                p = treeStack.top();
                //cout<<p->val<<endl;
                listVal.push_back(p->val);
                treeStack.pop();
                p = p->right;
          //当右孩子为NULL寻找上一级的右孩子
while(!treeStack.empty() && p == NULL){ p = treeStack.top(); //cout<<p->val<<endl; listVal.push_back(p->val); treeStack.pop(); p = p->right; } if(p != NULL) treeStack.push(p); else continue; } if(p->left != NULL){ p = p->left; treeStack.push(p); } } return listVal; } };
复制代码

 

posted @   yizhixiaozhu  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示