使用递归法建立二叉树

相关代码:

include

using namespace std;
typedef struct node//创建节点结构
{
char data;//数据元素
struct node Lchild;//指向左孩子结点
struct node
Rchild;//指向右孩子结点
}BinNode,*BinTree;
void CreateTree(BinTree &T);//递归法建立二叉树
void PreOrder(BinTree &T);//先序遍历
void InOrder(BinTree &T);//中序遍历
void PostOrder(BinTree &T);//后序遍历

int main()
{
BinTree T;
cout<<"请输入二叉树节点:";
CreateTree(T);
cout<<"先序遍历:";
PreOrder(T);
cout<<endl;
cout<<"中序遍历:";
InOrder(T);
cout<<endl;
cout<<"后序遍历:";
PostOrder(T);
cout<<endl;
return 0;
}

void CreateTree(BinTree &T)//创建二叉树
{
char str;
cin>>str;
if(str==‘0‘)//当输入0时,表示递归结束
T=NULL;
else
{
T=new BinNode;
T->data=str;
CreateTree(T->Lchild);//建立左子树
CreateTree(T->Rchild);//建立右子树
}
}

void PreOrder(BinTree &T)//先序遍历
{
if(T!=NULL)
{
cout<<T -> data;//输出根节点
PreOrder(T -> Lchild);//先序遍历左子树
PreOrder(T -> Rchild);//先序遍历右子树
}
}

void InOrder(BinTree &T)//中序遍历
{
if(T!=NULL)
{
InOrder(T -> Lchild);//中序遍历左子树
cout<<T -> data;//输出根节点
InOrder(T -> Rchild);//中序遍历右子树
}
}

void PostOrder(BinTree &T)//后序遍历
{
if(T!=NULL)
{
PostOrder(T -> Lchild);//后序遍历左子树
PostOrder(T -> Rchild);//后续遍历右子树
cout<<T -> data;//输出根节点
}
}

截图:

原文地址:https://www.cnblogs.com/ggad/p/10779758.html

时间: 2024-11-05 22:03:47

使用递归法建立二叉树的相关文章

Pre- and Post-order Traversals(先序+后序序列,建立二叉树)

PAT甲级1119,我先在CSDN上面发布的这篇文章:https://blog.csdn.net/weixin_44385565/article/details/89737224 Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inorder trave

递归建立二叉树

转载:递归建立二叉树 假设二叉树为: a b                 c d                 e 因为程序中要知道叶子结点(终点),所以要将上面的二叉树变成扩展二叉树 (把叶子结点的孩子补成#, 用作标记),  扩展后就变成了: a b                    c #        d          #       e #    #             #    # 那么,在输入的时候,需要输入: ab#d##C#e##      (注意,输入后,按

非递归建立二叉树

前言 使用递归(Recursion)建立二叉树(Binary Tree)的非顺序存储结构(即二叉链表),可以简化算法编写的复杂程度,但是递归效率低,而且容易导致堆栈溢出,因而很有必要使用非递归算法. 引入 无论是单链表还是二叉树,创建时要解决问题就是关系的建立,即单链表中前驱节点与当前节点的关系和二叉树中父节点与子节点的关系. 首先,思考一下建立单链表的过程,为了使链表各个节点连接起来,在创建当前节点(q)的时候,需借助一个指针(p)指向前一个节点,然后p->next = q. 由此推广至二叉树

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

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

建立二叉树以及三中递归遍历

#include <stdio.h>#include<stdlib.h>#define ElemType char//节点声明,数据域.左孩子指针.右孩子指针typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//先序建立二叉树BiTree CreateBiTree(){ char ch; BiTree T; scanf("%c",&ch);

采用先序遍历 和层次遍历递归建立二叉树--进行封装

1 package com.offer; 2 3 public class TreeNode { 4 5 int val = 0; 6 TreeNode left = null; 7 TreeNode right = null; 8 9 public TreeNode(int val) 10 { 11 this.val=val; 12 } 13 14 public TreeNode() 15 { 16 CreateBinaryTree();// 采用默认的 17 //preShow(this.r

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal (用先序和中序树遍历来建立二叉树)

Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. 题目标签:Array, Tree 题目给了我们preOrder 和 inOrder 两个遍历array,让我们建立二叉树.先来举一个例子,让我们看一下preOrder 和 inOrder的特性. 1 / \ 2        

C语言之函数调用17—递归法之一般函数的调用(2)

//递归法 /* ================================================================== 题目:求F(60),其中F(n)定义如下: F(0)=0; F(1)=1; F(2n)=f(n)+3; F(2n+1)=F(n)+F(2n-1). ================================================================== */ #include<stdio.h> double F(in

[LeetCode] Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树

Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. 这道题要求用先序和中序遍历来建立二叉树,跟之前那道Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树原理基本相同,针对这道题,由于先