• 非递归的中序遍历(inorder)树 leetcode 94


     1 class Solution {
     2 public:
     3     vector<int> inorderTraversal(TreeNode* root) {
     4         stack<TreeNode*> s;
     5         vector<int> val;
     6         TreeNode* curr = root;
     7         s.push(curr);
     8         while(!s.empty()) {
     9             while(curr) {
    10                 s.push(curr->left);
    11                 curr = curr->left;
    12             }
    13             curr = s.top();
    14             s.pop();
    15             if (curr) {
    16                 val.push_back(curr->val);
    17                 curr = curr->right;
    18                 if (curr) s.push(curr);
    19             }
    20         }
    21         return val;
    22     }
    23 };

    非递归时需要保留结点的父结点,这里使用栈

    首先把该结点的所有左节点都放在栈里(8-12)

    然后拿出一个结点,判断是不是空结点

    不是空结点就输出,并将其右结点加入栈内

    这样就保证先输出左子树,然后输出左子树的右子树,若左子树是叶子结点则为空,输出自己

    然后将右结点加入栈中,重复以上过程

    左右子树输出完毕时,curr总是指向空的右节点,不执行内层while

    按入栈顺序对父结点操作

  • 相关阅读:
    poj1703--Find them, Catch them
    poj2828--Buy Tickets
    POJ 2594 Treasure Exploration(Floyd+最小路径覆盖)
    HDU
    二分图的一些性质
    HDU
    POJ 1659 Frogs' Neighborhood (Havel定理构造图)
    HDU
    HDU
    2018 Multi-University Training Contest 1
  • 原文地址:https://www.cnblogs.com/jkserge/p/9320767.html
Copyright © 2020-2023  润新知