精华内容
下载资源
问答
  • 先序遍历非递归算法(C语言) 多种遍历方法
  • 1.先序遍历非递归算法#define maxsize 100typedef struct{ Bitree Elem[maxsize]; int top;}SqStack;void PreOrderUnrec(Bitree t){ SqStack s; StackInit(s); p=t; while (p!=null || !StackEmpty(s)) { while (p!=...
  • 1.先序遍历非递归算法voidPreOrderUnrec(Bitree*t){Stacks;StackInit(s);Bitree*p=t;while(p!=NULL||!StackEmpty(s)){while(p!=NULL)//遍历左子树{visite(p->data);push(s,p);p=p->lchild;}if(!StackEmpty(s))...

    1.先序遍历非递归算法

    voidPreOrderUnrec(Bitree *t)

    {

    Stack s;

    StackInit(s);

    Bitree *p=t;

    while(p!=NULL || !StackEmpty(s))

    {

    while(p!=NULL)//遍历左子树

    {

    visite(p->data);

    push(s,p);

    p=p->lchild;

    }

    if(!StackEmpty(s))//通过下一次循环中的内嵌while实现右子树遍历

    {

    p=pop(s);

    p=p->rchild;

    }//endif

    }//endwhile

    }void PreOrderUnrec(Bitree *t)

    {

    Stack s;

    StackInit(s);

    Bitree *p=t;

    while (p!=NULL || !StackEmpty(s))

    {

    while (p!=NULL) //遍历左子树

    {

    visite(p->data);

    push(s,p);

    p=p->lchild;

    }

    if (!StackEmpty(s)) //通过下一次循环中的内嵌while实现右子树遍历

    {

    p=pop(s);

    p=p->rchild;

    }//endif

    }//endwhile

    }

    2.中序遍历非递归算法

    voidInOrderUnrec(Bitree *t)

    {

    Stack s;

    StackInit(s);

    Bitree *p=t;

    while(p!=NULL || !StackEmpty(s))

    {

    while(p!=NULL)//遍历左子树

    {

    push(s,p);

    p=p->lchild;

    }

    if(!StackEmpty(s))

    {

    p=pop(s);

    visite(p->data);//访问根结点

    p=p->rchild;//通过下一次循环实现右子树遍历

    }//endif

    }//endwhile

    }void InOrderUnrec(Bitree *t)

    {

    Stack s;

    StackInit(s);

    Bitree *p=t;

    while (p!=NULL || !StackEmpty(s))

    {

    while (p!=NULL) //遍历左子树

    {

    push(s,p);

    p=p->lchild;

    }

    if (!StackEmpty(s))

    {

    p=pop(s);

    visite(p->data); //访问根结点

    p=p->rchild; //通过下一次循环实现右子树遍历

    }//endif

    }//endwhile

    }

    posted on 2013-11-20 11:02 ** 阅读(105) 评论(0)  编辑  收藏

    展开全文
  • 主要介绍了二叉树先序遍历非递归算法,有需要的朋友可以参考一下
  • 先序遍历非递归版本是三种遍历里面最 /* 二叉树节点结构 */ struct BinaryTreeNode { int data; BinaryTreeNode* lchild; BinaryTreeNode* rchild; BinaryTreeNode(int _data = -1): data(_data),...
    先序遍历的非递归版本是三种遍历里面最简单的,因为遍历过程无需保存根节点以便从子节点返回时访问。

    /* 二叉树节点结构 */
    struct BinaryTreeNode {
        int data;
        BinaryTreeNode* lchild;
        BinaryTreeNode* rchild;
        BinaryTreeNode(int _data = -1):
            data(_data),lchild(NULL),rchild(NULL){}
    };
    
    void preOrderTraverseNonRecursively( BinaryTreeNode *pRoot ) {
        if( pRoot == NULL ) {
            printf("Empty tree!\n");
            return;
        }
    
        stack stk;
        BinaryTreeNode* pCurNode = NULL;
        stk.push( pRoot );
        while( !stk.empty() ) {
            pCurNode = stk.top();
            printf( "%d  ", pCurNode ->data ); /* 访问该节点 */
            stk.pop();
            if( pCurNode ->rchild ) /* 先让右孩子进栈 */
                stk.push( pCurNode ->rchild );
            if( pCurNode ->lchild ) /* 再让左孩子进栈 */
                stk.push( pCurNode ->lchild );
        }
    }
    
    展开全文
  • 先序遍历非递归算法C语言二叉树前序、中序、后序三种遍历的非递归算法和递归算法最精悍版
  • #include ... cout先序遍历非递归形式结果为:"; B.preOrderStack(p); system("pause"); return 0; } **********************************************以上main函数*************************
  • void PreOrder(BTNode* root){ if (root == NULL) { return; } //Init Stack stack; stack.top = -1; //Root gets into stack BTNode* q; stack.top++; stack.data[stack.top] = root;....
    typedef struct BTNode{
        char data;
        struct BTNode* left;
        struct BTNode* right;
    }BTNode;
    
    void PreOrder(BTNode* root){
        if (root == NULL) {
            return;
        }
    
        //Init
        Stack stack;
        stack.top = -1;
    
        //Root gets into stack
        BTNode* q;
        stack.top++;
        stack.data[stack.top] = root;
    
        //Process
        while (stack.top != -1) {
            q = stack.data[stack.top--];
            cout<< "current data : " << q->data << "\n";
            if (q->right) {
                stack.top++;
                stack.data[stack.top] = q->right;
            }
            if (q->left) {
                stack.top++;
                stack.data[stack.top] = q->left;
            }
        }
        
    }
    
    展开全文
  • 在二叉树先序遍历非递归算法中,先将根结点压栈,在栈不为空的时候执行循环: 让栈顶元素p出栈,访问栈顶元素p,如果p的右孩子不为空,则让其右孩子先进栈,如果p的左孩子不为空,则再让其左孩子进栈(注意:进栈...

    先序遍历二叉树的时候,首先访问根结点,再访问左孩子,最后访问右孩子。在二叉树先序遍历非递归算法中,先将根结点压栈,在栈不为空的时候执行循环:

    让栈顶元素p出栈,访问栈顶元素p,如果p的右孩子不为空,则让其右孩子先进栈,如果p的左孩子不为空,则再让其左孩子进栈(注意:进栈顺序一定是先右

    孩子,再左孩子)

    二叉树先序遍历的非递归算法如下:

    struct TreeNode {
     int val;
     TreeNode *left;
     TreeNode * right;
     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };

    vector<int> preorderTraversal(TreeNode* root) { vector<int> res; if (root == NULL) { return res; } stack<TreeNode *> st; st.push(root); while (!st.empty()) { TreeNode * top = st.top(); st.pop(); res.push_back(top->val); if (top->right != NULL) { st.push(top->right); } if (top->left != NULL) { st.push(top->left); } } return res; }

    二叉树先序遍历的递归算法如下:

    void preorderHelp(TreeNode * root, vector<int> & path)
        {
            if (root == NULL)
            {
                return;
            }
    
            path.push_back(root->val);
            preorderHelp(root->left, path);
            preorderHelp(root->right, path);
        }

     

    转载于:https://www.cnblogs.com/ordili/p/10429563.html

    展开全文
  • #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct node { int data; struct node*lchild,*rchild; }tnode,*tree; tree creat() { int x;... tree ...
  • 用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法
  • 用C++写的,包括二叉树的构建,二叉树的先序遍历、中序遍历和后序遍历非递归算法
  • 先序遍历非递归算法设计 二叉树的遍历是按一定的次序访问树中的所有结点,使每个结点恰好被访问一次。其中遍历次序保证了二叉树上每个结点均被访问一次切仅有一次。 遍历就是把二叉树结点按某种次...
  • 二叉树的先序遍历-递归和非递归算法

    万次阅读 多人点赞 2018-11-16 13:55:04
    需要实践先序遍历,我们先建立二叉树。这里采用先序序列建立二叉树,不为别的,因为简单。 typedef int ElemType; typedef struct BiTNode{ ElemType data; struct BiTNode *lchild, *rchild; }*BiTree, BiTNode...
  • 二叉树的先序遍历非递归算法 直接上代码(用栈实现) #include <iostream> #include "btree.h" #include <stdio.h> using namespace std; int main() { BTNode *p,*q; char str[MaxSize],m; printf(...
  • 先序遍历非递归算法

    千次阅读 2014-01-13 11:25:57
    先序遍历非递归访问,使用栈即可实现。先序遍历的非递归访问在所有的遍历中算是最简单的了。主要思想就是先将根结点压入栈,然后根结点出栈并访问根结点,而后依次将根结点的右孩子、左孩子入栈,直到栈为空为止。...
  • 用户以先序遍历的方式键入二叉树各结点的数据域值(字符型),程序建立二叉树,然后分别用递归和非递归算法对二叉树进行遍历。每访问一个结点即打印该结点的数据域值。
  • 已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法: void pre_order(BiTree root); 在遍历过程中,pre_order函数需要调用 visit_node 函数来实现对结点的访问,该函数声明如下: ...
  • 在传统的二叉树递归算法的基础上,讨论了两种非递归算法。一种是较常见的算法,但这种算法有重复的操作,因而笔者做了修改,形成了第二种算法,并在时间复杂度和空间复杂度方面对这两种算法的优劣进行了探讨。
  • 数据结构与算法:二叉树的先序遍历(递归与非递归方法) public class BinaryTree<E> { private TreeNode<E> root; //根节点 private List<TreeNode> nodeList = null; //二叉树节点的链式...
  • 试利用栈的基本操作写出先序遍历非递归形式的算法 (我之前的博客写的有) #include<iostream> #include<stack> using namespace std; #define TElemType double typedef struct BiTNode { ...
  • 二叉树先序遍历(递归与非递归)及C语言实现

    千次阅读 多人点赞 2019-03-18 19:02:06
    二叉树先序遍历的实现思想是: 访问根节点; 访问当前节点的左子树; 若当前节点无左子树,则访问当前节点的右子树; 图1 二叉树 以图 1 为例,采用先序遍历的思想遍历该二叉树的过程为: 访问该二叉树的根...
  • 先序遍历非递归遍历算法: 1 void InOrderTraversal(BinTree BT) 2 { 3 BinTree T=BT; 4 stack S=CreatStack(MaxSize)://创建并初始化堆栈S 5 while(T || !IsEmpty(S)){ 6 While(T){//一直向左并将...
  • int NInorderTraverse(BiTree &Tint*visit(char e) { InitStack(S; Push(S,T;//根指针入栈 while!StackEmpty(S)//在树不空的情况下 { while(GetTop(S,p&p) Push(S,p->lchild;//向左走到头 Pop(S,p;...
  • 二叉树先序遍历非递归算法

    千次阅读 2014-01-06 14:58:29
    总结先根遍历得到的非递归算法思想如下: 1)入栈,主要是先头结点入栈,然后visit此结点 2)while,循环遍历当前结点,直至左孩子没有结点 3)if结点的右孩子为真,转入1)继续遍历,否则退出当前结点转入父母结点...
  • 二叉树是一种很重要的数据结构,在互联网面试笔试中,二叉树都是考察...二叉树遍历算法可以采用递归来实现,也可以采用非递归 的方式来实现。由于采用递归的方式实现二叉树的遍历太简单,因此在这里直接略过,着...
  • 难易程度:★★ 重要性:★★★★★ ...//先序遍历递归版本 public static ArrayList<Integer> preOrder(TreeNode root) { ArrayList<Integer> res = new ArrayList<Integer>(); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,376
精华内容 4,550
关键字:

先序遍历非递归算法