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

    按入栈顺序对父结点操作

  • 相关阅读:
    数组塌陷现象
    深浅拷贝的区别
    冒泡排序,选择排序的应用
    JavaScript双重循环的嵌套
    Css Grid网格布局
    css3动画详细介绍
    Python tkinter Label Widget relief upload image
    XXXFD
    XXX1
    Python爬取一个简单网页的HTML代码
  • 原文地址:https://www.cnblogs.com/jkserge/p/9320767.html
Copyright © 2011-2022 走看看