二叉树的创建及遍历_递归遍历

#include <iostream>
#include <cstdio>
#include <malloc.h>

using namespace std;

typedef struct tree{
    char a;
    tree *lchild;
    tree *rchild;
};

tree* create(tree *T){

    char c=getchar();
    if(c==‘#‘){
        T=NULL;
    }else{

        T=(tree*)malloc(sizeof(tree));
        T->a=c;
        if(!T){
            printf("\Error!n");
        }
        T->lchild=create(T->lchild);
        T->rchild=create(T->rchild);
    }
    return T;

}

void preorder(tree *T){
    if(T){
        printf("%c",T->a);
        preorder(T->lchild);
        preorder(T->rchild);
    }
}

void inorder(tree *T){
    if(T){
        inorder(T->lchild);
        printf("%c",T->a);
        inorder(T->rchild);
    }
}

void postorder(tree *T){
    if(T){
        postorder(T->lchild);
        postorder(T->rchild);
        printf("%c",T->a);
    }
}

//非递归先序遍历

//非递归中序遍历

int main()
{
    tree *T;
    printf("Plese input the tree‘s sequence:\n");
    T=create(T);
    printf("preorder:    ");
    preorder(T);
    printf("\n");
    printf("inorder:     ");
    inorder(T);
    printf("\n");
    printf("postorder:   ");
    postorder(T);
    printf("\n");
    return 0;
}
时间: 2024-10-27 17:38:56

二叉树的创建及遍历_递归遍历的相关文章

二叉树的创建与三种递归遍历

#include<iostream>struct tree{ struct tree *left; struct tree *right; int data;};tree *T;typedef struct tree *Tree,*TNode,TREE;using namespace std;void PreCreateTree(Tree& T);void PreOrder(Tree& T);void InOrder(Tree& T);void PostOrder(Tr

C++实现二叉树的建立和三种递归遍历

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 二叉树是一种常见的数据结构,二叉树的遍历也是家常便饭的事了,这里仅仅写出一个完整的可以运行的C++代码来随便建立一个如下图所示的二叉树,建一棵二叉树是实现二叉树各种操作的基础,下面的程序也很简单,这只是二叉树练习的开始,以后的博文中,将会紧紧围绕这棵二叉树练习更多的操作:如求二叉树的大小,二叉树的深度,翻转二叉树...,这里只是基础中的基础,只是为以后的学习做铺垫. 下面给出C++代码,代码的功能包括: 1.建立如上图所示的简单的二叉树. 2.

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

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

二叉树的迭代遍历以及递归遍历

二叉树的前序遍历(递归版): public ArrayList<Integer> inOrder(TreeNode root ){ ArrayList<Integer> result = new ArrayList<Integer>(); if(root == null){ return result; } result.add(root.val); inOrder(root.left);+ inOrder(root.right); return result; } 二

数据结构 树的遍历(递归遍历)

//树的遍历--递归遍历 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct _TreeNode{ //数据域 char data; //指针域 struct _TreeNode * leftchild;//左孩子指针 struct _TreeNode * rightchild;//右孩子指针 }TreeNode, *TreeNodePointer; //先序遍历 void Pri

牛客_剑指offer_重建二叉树,再后续遍历_递归思想_分两端

   总结:    重建二叉树:其实就是根据前序和中序重建得到二叉树,得到后续,只要输出那边设置输出顺序即可 [编程题]重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 完整通过代码: 先新建一个二叉树的类 public class TreeNode { int val; TreeNode left

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

1 #include <iostream> 2 #include <stack> 3 #include <queue> 4 using namespace std; 5 struct BinTree 6 { 7 int data; 8 BinTree *lc; 9 BinTree *rc; 10 }BTNode,*BinTree; 11 12 //中序遍历的非递归算法 13 void InOrder(BinTree T) 14 { 15 stack<BinTree

java 二叉树 深度优先递归遍历

深度优先遍历二叉树. 1. 中序遍历的递归算法: 若二叉树为空,则算法结束:否则: 中序遍历根结点的左子树: 访问根结点: 中序遍历根结点的右子树. 2. 前序遍历的递归算法: 若二叉树为空,则算法结束,否则: 访问根结点: 前序遍历根结点的左子树: 前序遍历根结点的右子树. 3. 后序遍历的递归算法: 若二叉树为空,则算法结束,否则: 后序遍历根结点的左子树: 后序遍历根结点的右子树: 访问根结点. package com.test6; /**  * 二叉树  *   * 描述: 1.二叉树的

leetcode | 二叉树的前序遍历、中序遍历、后续遍历的非递归实现

Binary Tree Preorder Traversal:https://leetcode.com/problems/binary-tree-preorder-traversal/ Binary Tree Inorder Traversal :https://leetcode.com/problems/binary-tree-inorder-traversal/ Binary Tree Postorder Traversal:https://leetcode.com/problems/bin