zoukankan      html  css  js  c++  java
  • 非递归的中序遍历(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

    按入栈顺序对父结点操作

  • 相关阅读:
    代码块&继承&final关键字
    Java基础
    我的学习笔记
    CF743C 题解
    洛谷P4180 题解
    洛谷P3402 题解
    洛谷P3919 题解
    Noi.ac#30 题解
    Noi.ac #65题解
    Noi.ac #51题解
  • 原文地址:https://www.cnblogs.com/jkserge/p/9320767.html
Copyright © 2011-2022 走看看