每日一题 Leetcode 144

解题思路
从根节点开始判断:
若根节点为空,返回空。
若根节点不为空,则向左遍历,记录节点,直到左节点为空。然后出栈一次,退回上一节点,找到上一节点的右节点,继续上述步骤。最后返回记录的值。

(注释部分为原先自写的栈和方法,可能有错,仅供参考)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    // struct Stack{
    //     vector<int> v;
    //     int top;
    // };

    // void emptyStack(Stack *S)
    // {
    //     S->top=-1;
    // }

    // bool isEmptyStack(Stack *S)
    // {
    //     if(S->top==-1) return true;
    //     return false;
    // }

    // void comeStack(Stack *S,TreeNode *root)
    // {
    //     S->v.push_back(root->val);
    //     S->top++;
    // }

    // void goStack(Stack *S)
    // {
    //     if(S->top!=-1) {
    //         S->v.pop_back();
    //         S->top--;
    //     }
        
    // }

    vector<int> preorderTraversal(TreeNode* root) {

        //栈(存放的是节点)
        stack<TreeNode*> S;
        //数组a,用来返回遍历完的结果
        vector<int> a;
        //创建临时节点p,用来操作获取内容
        TreeNode *p=root;

        //如果根节点不存在,返回空
        if(root==nullptr)
        {
            return a;
        }
        else
        {
            //在p和S任一不为空的情况下进行循环
            while(p || !S.empty())
            {
                //s.push_back(p->val);
                while(p)//当p不为空
                {
                    a.push_back(p->val);//记录当前节点
                    S.push(p);//p入栈
                    p=p->left;//向左节点遍历  
                }
                //p为空时
                p=S.top();//p指向栈顶,在前一循环中p指向了p的左节点
                S.pop();//出栈
                p=p->right;//将p指向p的右节点,将其视为根节点,继续循环  
            }

            return a;
        }

        

        


    }


};

作者:kutu1bw-i
链接:https://leetcode.cn/problems/binary-tree-preorder-traversal/solution/lei-si-dfsqi-shi-ye-shi-jiang-di-gui-guo-60cl/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值