二叉树中序遍历非递归写法

中序遍历比前序要稍微复杂些,我也先用手写理出思路

代码写的和书上的一比。。。感觉麻烦了好多,但毕竟是自己理的思路不容易忘,所以还是贴自己的

void inOrder_stack(BiTree T){
    printf("\n非递归中序遍历结果:\n");
    initStack(&sqStack);
    BiTree p=T,l;//l用于保存上次的输出
    push(&sqStack,p);
    while(!stackEmpty(sqStack)){
        getTop(&sqStack,&p);
        if(p->lchild!=NULL&&p->lchild!=l){
            push(&sqStack,p->lchild);
        }
        else {
            pop(&sqStack,&l);
            printf("%d ",l->data);
            if(l->rchild!=NULL){
                push(&sqStack,l->rchild);
            }
            else if(l->rchild==NULL){
                if(!stackEmpty(sqStack)){
                    pop(&sqStack,&l);
                    printf("%d ",l->data);

                    if(l->rchild!=NULL){
                        push(&sqStack,l->rchild);
                    }
                }
            }
        }
    }
}

原文地址:https://www.cnblogs.com/otaganyuki/p/9774662.html

时间: 2024-10-08 10:03:47

二叉树中序遍历非递归写法的相关文章

二叉树前序、中序、后序遍历非递归写法的透彻解析

前言 在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历.递归写法,只要理解思想,几行代码.可是非递归写法却很不容易.这里特地总结下,透彻解析它们的非递归写法.其中,中序遍历的非递归写法最简单,后序遍历最难.我们的讨论基础是这样的: //Binary Tree Node typedef struct node { int data; struct node* lchild; //左孩子 struct node* rchild; //右孩子 }BTNode; 首先,有一点是明确的:非递归

leetcode 二叉树中序遍历的递归和非递归实现

Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tree {1,#,2,3},    1          2     /    3 return [1,3,2]. /**  * Definition for a binary tree node.  * struct TreeNode {  *     int val;  *     TreeNode

二叉树的中序、先序、后序遍历非递归遍历算法(使用堆栈,用循环实现)

1 typedef struct TreeNode *BinTree; 2 typedef BinTree Position; 3 struct TreeNode{ 4 ElementType Data; 5 BinTree Left; 6 BinTree Right; 7 }; 8 BinTree BT; 9 void InOrderTraversal(BinTree BT)//中序遍历非递归遍历算法(使用堆栈,用循环实现) 10 { 11 BinTree T=BT; 12 Stack S=C

Java数据结构系列之——树(4):二叉树的中序遍历的递归与非递归实现

package tree.binarytree; import java.util.Stack; /** * 二叉树的中序遍历:递归与非递归实现 * * @author wl * */ public class BiTreeInOrder { // 中序遍历的递归实现 public static void biTreeInOrderByRecursion(BiTreeNode root) { if (root == null) { return; } biTreeInOrderByRecursi

前序中序后序遍历非递归实现

#include<iostream> #include<vector> #include<stack> #include<string> #include<algorithm> #include<numeric> using namespace std; class node{ public: int val; node* left; node* right; node():val(0),left(NULL),right(NULL){

Leetcode: Binary Tree Inorder Traversal(二叉树中序遍历)

题目: Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3 return [1,3,2]. Note: Recursive solution is trivial, could you do it iteratively? 递归解法(C++): /** * Definition for binary tre

【LeetCode-面试算法经典-Java实现】【094-Binary Tree Inorder Traversal(二叉树中序遍历)】

[094-Binary Tree Inorder Traversal(二叉树中序遍历)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a binary tree, return the inorder traversal of its nodes' values. 题目大意 对一棵二叉树进行中序遍历. 解题思路 解法一:递归实现,解法二:迭代实现. 代码实现 二叉树结点类 public class TreeNode { int val; TreeNod

94 Binary Tree Inorder Traversal(二叉树中序遍历Medium)

题目意思:二叉树中序遍历,结果存在vector<int>中 解题思路:迭代 迭代实现: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Soluti

二叉树中序遍历 (C语言实现)

在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构.二叉树是每个节点最多有两个子树的有序树.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用于实现二叉查找树和二叉堆. 如下是实现创建二叉树和二叉树中序遍历的代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <memory.h> 4 5 t