zoukankan      html  css  js  c++  java
  • ACM-后序遍历(简单方法和正规方法)

    1.后序遍历简单方法

    /*
    *二叉树遍历一般有三种方法:前序,中序,后序。
    *其中前序遍历u顺序为:根->左子树->右子树,在此定义一种新的遍历方法:根->右子树->左子u树
    *使用我们新定义的方法遍历二叉树之后,再用reverse()函数反转一下,便得到后序遍历序列!
    *以下是具体实现代码:
    */
    vector<int> postorderTraversal(TreeNode *root) { vector<int> postorderTraversal; //后续遍历 if(root == nullptr) return postorderTraversal; stack<TreeNode *> tempStack; tempStack.push(root); while(tempStack.size() != 0){ TreeNode *p = tempStack.top(); tempStack.pop(); postorderTraversal.push_back(p->val); if(p->left != nullptr) tempStack.push(p->left); if(p->right != nullptr) tempStack.push(p->right); } reverse(postorderTraversal.begin(),postorderTraversal.end()); return postorderTraversal; }

    2.后序遍历正规方法

    /*
    *非递归进行后序遍历
    *利用栈的特性进行后序遍历,每个节点有三种情况:
    * 1.此节点左右子树不是都为空,那么将此节点的右节点、左节点分别按照顺序入栈,先右后左的顺序保证了出栈时是先遍历左子树,再遍历右子树的
    * 2.此节点左右子树都为空,则遍历此节点,并将此节点从栈中删除
    * 3.上一次遍历的节点是此节点的左或右节点,那么此次应该遍历的节点就是此节点
    */
    vector<int> postorderTraversal(TreeNode *root) { vector<int>res; //后序遍历的序列 stack<TreeNode *>tempStack; if(root == nullptr) return res; tempStack.push(root); TreeNode *preNode = nullptr; while(tempStack.size() != 0){ TreeNode *current = tempStack.top(); //取出栈顶元素,不删除 if((current->left == nullptr && current->right == nullptr) || (preNode != nullptr && (preNode == current->left || preNode == current->right))) { res.push_back(current->val); tempStack.pop(); preNode = current; } else{ if(current->right != nullptr) tempStack.push(current->right); if(current->left != nullptr) tempStack.push(current->left); } } return res; }
  • 相关阅读:
    Java 程序员常用的 22 个Linux命令
    20190131 经验总结:如何从rst文件编译出自己的sqlalchemy的文档
    Python学习笔记:Flask-Migrate基于model做upgrade的基本原理
    20180821 Python学习笔记:如何获取当前程序路径
    网络编程之 keepalive(zz)
    java socket编程中backlog的含义(zz)
    20170814 新鲜:EChart新增了日历图,要想办法用起来
    Canvas 和 SVG 的不同
    androidstudio全局搜索快捷键Ctrl+Shift+F失效的解决办法
    Android support 26.0.0-alpha1 产生的问题(zz)
  • 原文地址:https://www.cnblogs.com/qiang-wei/p/9487261.html
Copyright © 2011-2022 走看看