二叉树的建立及递归遍历

huangjing

二叉树的的建立方式为前序  二叉树有三种遍历  前序遍历(NLR)  中序遍历(LNR)  后续遍历(LRN)

非递归的算法明天补上

代码为:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<map>
#include<vector>
#include<cmath>
#include<string>
#include<queue>
#define eps 1e-9
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;

typedef struct  BITNode
{
    char val;
    struct  BITNode *left,*right;
}BITNode,*BITtree;

void buildtree(BITtree &T)
{
     char  ss;
     scanf("%c",&ss);
     if(ss=='#')
     {
         T=NULL;
         return;
     }
     else
     {
         T=(BITtree)malloc(sizeof(BITNode));
         T->val=ss;
         buildtree(T->left);
         buildtree(T->right);
     }
}//先序建立二叉树

void visit(BITtree T)
{
    if(T->val!='#')
        printf("%c",T->val);
}

void pre_visit(BITtree T)
{
    if(T!=NULL)
    {
         visit(T);
         pre_visit(T->left);
         pre_visit(T->right);
    }
}//遍历方式为NLR

void mid_visit(BITtree T)
{
    if(T!=NULL)
    {
         mid_visit(T->left);
         visit(T);
         mid_visit(T->right);
    }
}//遍历方式为LNR

void beh_visit(BITtree T)
{
    if(T!=NULL)
    {
        beh_visit(T->left);
        beh_visit(T->right);
        visit(T);
    }
}//遍历方式为LRN

int main()
{
    BITtree p;
    buildtree(p);
    printf("前序遍历为:\n");
    pre_visit(p);
    cout<<endl;
    printf("中序遍历为:\n");
    mid_visit(p);
    cout<<endl;
    printf("后序遍历为:\n");
    beh_visit(p);
}

/*
ABC##DE#G##F###
-+a##*b##-c##d##/e##f##
*/
时间: 2024-11-07 18:25:53

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

数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历

数据结构二叉树-- 编写函数实现:建立二叉树.中序递归遍历.借助栈实现中序非递归遍历.借助队列实现层次遍历.求高度.结点数.叶子数及交换左右子树. ("."表示空子树) #include<stdio.h> #include<stdlib.h> //***********二叉树链表节点结构 typedef char DataType; typedef struct Node {  DataType data;  struct Node*LChild;  struc

Java学习(十八):二叉树的三种递归遍历

二叉树的三种递归遍历: 1 public class StudentNode 2 { 3 private String name; 4 5 private StudentNode leftNode; 6 7 private StudentNode rightNode; 8 9 public String getName() 10 { 11 return name; 12 } 13 14 public void setName(String name) 15 { 16 this.name = na

10 二叉树-链式存储-递归遍历

终于进入非线性数据结构的第一站了! 先从简单的开始回忆起来吧! 1.二叉树的链式存储 用一个链表来存储一颗二叉树,每一个结点用链表的一个链结点来存储. 通常地,一个二叉链表至少包含3个域:数据域data.左指针域lchild.右指针域rchild. 现实应用的过程中,可以按照自己的需求添加其他指针域. 1 typedef struct BitNode{ 2 int data; 3 struct BitNode *lchild,*rchild; 4 }BitNode,*BiTree; 2.遍历 二

二叉树学习之非递归遍历

二叉树递归遍历可谓是学过数据结构的同仁都能想一下就能写出来,但在应聘过程我们常常遇到的是写出一个二叉树非递归遍历函数,接着上篇文章写二叉树的非递归遍历,先难后易,一步一步的来. 先上代码: #include "binarytree.h" #include <stack> #include <queue> #ifndef RECU #warning("RECU is not defined") /** *前序遍历(根左右) * *1.当前节点为

二叉树前中后递归遍历

1 public class Node { 2 public int value; 3 public Node left; 4 public Node right; 5 6 public Node (int data){ 7 this.value = data; 8 } 9 } 1 public class BinaryTreeMethod { 2 3 /** 4 * 二叉树递归前序遍历 5 * @param head 6 */ 7 public void preOrderRecur(Node

二叉树的三种递归遍历实现

声明:学过二叉树的童鞋可以跳过前面的故事,直接看最后的代码实现.  你见过二叉树吗?一种很神奇的树,传说见到他的人都是幸运的.如果你没见过,好运立马降临: 怎么样?有被惊艳到吗?好运已经送到,祝你今晚睡得香甜. 好了,送完祝福,下面讲一个神奇的故事: 讲故事前,简单说说二叉树. 那么我要说的二叉树是什么呢?它是一种数据结构,数据结构是什么可以自行百度一下,这里不讨论他.举一个现实中的例子:把某个家庭看作一棵树,这家的爸爸(妈妈)有两个孩子,那么爸爸(妈妈)就是树的根,俩孩子就是这棵树的叶子,而此

二叉树后序非递归遍历

package com.basic.bt; import java.util.ArrayList; import java.util.Stack; /** * Created by mac on 2017/1/19. */ public class PostOrderBT { ArrayList<Integer> result = new ArrayList<Integer>(); public void postorder(TreeNode root) { if(root ==

二叉树中序非递归遍历

package com.basic.bt; import java.util.ArrayList; import java.util.Stack; /** * Created by mac on 2017/1/19. */ public class InOrderBT { ArrayList<Integer> result = new ArrayList<Integer>(); ArrayList<Integer> traversal = new ArrayList&l

C++ 二叉树的建立与遍历

重温了一下二叉树这个结构,以前上课的时候都是感觉懂了,具体实现还没有动手写过.主要写了二叉树的建立,递归遍历以及深度,根节点等方法. //树节点的头文件 #ifndef BinTreeNode_H_#define BinTreeNode_H_#define NULL 0class BinTreeNode{public: char data; BinTreeNode* leftChild; //左子树 BinTreeNode* rightChild;//右子树 public: BinTreeNod