二叉树的三种遍历(非递归)

先定义二叉树:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */

二叉树的先序遍历(以LeetCode 144.为例):

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int>ans;
        stack<TreeNode*>s;
        s.push(root);
        while(!s.empty()){
            TreeNode *u=s.top();
            s.pop();
            if(u==NULL) continue;
            ans.push_back(u->val);
            if(u->right) s.push(u->right);
            if(u->left) s.push(u->left);
        }
        return v;
    }
};

  

二叉树的中序遍历(以LeetCode 94.为例):

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int>ans;
        stack<TreeNode*>s;
        while(1){
            while(root){
                s.push(root);
                root=root->left;
            }
            if(s.empty()) break;
            root=s.top();
            s.pop();
            ans.push_back(root->val);
            root=root->right;
        }
        return ans;
    }
};

  

二叉树的后序遍历(以LeetCode 145.为例):

class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int>ans;
        stack<TreeNode *>s;
        s.push(root);
        while(!s.empty()){
            TreeNode *u=s.top();
            s.pop();

            if(u==NULL) continue;
            ans.push_back(u->val);
            s.push(u->left);
            s.push(u->right);
        }
        reverse(ans.begin(),ans.end());
        return ans;
    }
};

  

时间: 2024-10-11 12:36:56

二叉树的三种遍历(非递归)的相关文章

二叉树的三种遍历的递归与非递归算法

今天复习了一下二叉树的前序遍历.中序遍历.后序遍历的递归与非递归算法,顺便记录一下: //TreeTest.h #include <iostream> struct TreeNode { int value; TreeNode* leftChild; TreeNode* rightChild; void print() { printf("%d ",value); } }; class MyTree { private: TreeNode* m_root; TreeNode

java实现二叉树的三种遍历算法(递归)

一,定义一个节点类: package test; public class Node { private int data; private Node left; private Node right; public Node(int data) { this.data = data; } public int getData() { return data; } public void setData(int data) { this.data = data; } public Node ge

二叉树三种遍历(递归以及非递归实现)

package com.shiyeqiang.tree; import java.util.Stack; public class BiTree { public static void main(String[] args) { // 首先构造叶子节点 BiTree leafA1 = new BiTree(4); BiTree leafA2 = new BiTree(5); BiTree leafB1 = new BiTree(6); BiTree leafB2 = new BiTree(7)

二叉树的三种遍历方式的循环和递归的实现方式

///////////////////头文件:BST.h//////////////////////// #ifndef BST_H #define BST_H #include "StdAfx.h" #include<iostream> #include<stack> template<typename DataType> class BST { public: class Node { public: Node(int data=0):m_dat

二叉树三种遍历非递归算法

http://blog.csdn.net/pipisorry/article/details/37353037 c实现: 1.先序遍历非递归算法 #define maxsize 100 typedef struct { Bitree Elem[maxsize]; int top; } SqStack; void PreOrderUnrec(Bitree t) { SqStack s; StackInit(s); p=t; while (p!=null || !StackEmpty(s)) { w

二叉树的三种遍历简单版

同学突然向我问二叉树的三种遍历代码.数据结构刚刚学了,自己很吃力的敲了出来. 和老师演示的代码有很大差距. #include <stdio.h>#include <string.h>#include <stdlib.h> #define Error -1#define Right 1 struct BiTnode{    char data;    struct BiTnode *LChild;    struct BiTnode *RChild; }; BiTnode

公交车站捡垃圾之二叉树的三种遍历方法

# 二叉树的遍历 今天下午看了二叉树的三种遍历方式,虽然能写出代码,但是理解可能不太到位,感觉很容易忘,所以想到一个形象的方法,把每个节点当作公交车站,而访问节点则是在这个公交车站捡垃圾,右子树和左子树则表示岔路.然后这个捡垃圾的人钟爱左边这个方向,所以一直以左优先.甲乙丙三个人,都爱捡垃圾,但是思考方式不同,所以捡垃圾的方法有点不同. 先序遍历 先序遍历最简单,秉承的原则是,甲很小心谨慎,每次经过公交车站,怕别人捡了,都把垃圾先捡到手,直到左边的路走完了,再往回走,但是回来的过程中,在公交车站

PTA 二叉树的三种遍历(先序、中序和后序)

6-5 二叉树的三种遍历(先序.中序和后序) (6 分) 本题要求实现给定的二叉树的三种遍历. 函数接口定义: void Preorder(BiTree T); void Inorder(BiTree T); void Postorder(BiTree T); T是二叉树树根指针,Preorder.Inorder和Postorder分别输出给定二叉树的先序.中序和后序遍历序列,格式为一个空格跟着一个字符. 其中BinTree结构定义如下: typedef char ElemType; typed

算法学习 - 树的三种遍历(递归实现)先序遍历,中序遍历,后序遍历

树的遍历 这三种遍历方法其实都很简单的,举例来说: a / b c 这个是例子下面讲下这三个是如何遍历的. struct TreeNode; typedef TreeNode* Node; typedef int EleType; struct TreeNode{ Node lchild; Node rchild; EleType data; }; 先序遍历 先序遍历,就是从上到下,从左到右,遇到一个就遍历,上面这个例子遍历的序列就是:a b c 递归代码如下: void PreOrderTre

POJ2255 TreeRecovery(二叉树的三种遍历)

Description Little Valentine liked playing with binary trees very much. Her favorite game was constructing randomly looking binary trees with capital letters in the nodes. This is an example of one of her creations: D / \ B E / \ \ A C G / F To recor