二叉树的链表实现(递归)

/*************************************************************************
     File Name: bitree.cpp
     Author: yubo
     Mail: [email protected]
     Created Time: 2014年04月27日 星期日 23时45分04秒
     学习重点:结点的定义,使之称为类型,作为形参的类型传递;递归的理解;
 ************************************************************************/

#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
//定义结点
typedef struct BiNode{
	char data;
	struct BiNode *lch;
	struct BiNode *rch;

}BiNode,*Bitree;//*Bitree相当于一个自定义的数据类型了
//先序建立二叉树,一定要以正则二叉树的形式写入数据,虚结点用#代替
void Create(Bitree &T)
{
	T=(BiNode*) malloc (sizeof(BiNode));
	printf("Enter the data \n");
	scanf(" %c",&T->data);
	if(T->data==‘#‘) T=NULL;
		if(T){
			printf("");
			Create(T->lch);
			Create(T->rch);
		}
}
//先序遍历(递归)
void PreOrder(Bitree T)//为什么是他了
{
	if(T){
		printf(" %c",T->data);
		PreOrder(T->lch);
		PreOrder(T->rch);
	}
}
//中序遍历
void InOrder(Bitree T)
{
	if(T){
		InOrder(T->lch);
		printf(" %c",T->data);
		InOrder(T->rch);
	}
}
//后续遍历
void PostOrder(Bitree T)
{
	if(T){
		PostOrder(T->lch);
		PostOrder(T->rch);
		printf(" %c",T->data);
	}
}
int main()
{
	printf("建树了\n");//输入的时候一定要想插图中那样才行
	Bitree T;
	Create(T);
	printf("\n先序遍历\n");
	PreOrder(T);
	printf("\n中序遍历\n");
	InOrder(T);
	printf("\n后序遍历\n");
	PostOrder(T);
}
时间: 2024-07-29 15:05:48

二叉树的链表实现(递归)的相关文章

从二叉树改链表引发的递归二三想

递归其实就是寻找通项公式,但是通项公式可以有轻微的区别. 比如二叉树改链表(只调整箭头方向)这件事情,用以下两种方法都可以实现. 方法1: 从根开始 (1)调整左子树 (2)调整右子树  (3)(如何调整)左子树的最大值连接 自身,右子树的最小值连接自身 方法2:从根开始  (1)返回左子树最大值连接自身 (2)返回右子树最小值连接自身 (3)(如何返回值)如果是来自左子树,返回最大值,如果是来自右子树,返回最小值 (4)  递归调整左右子树 进而可以简化为 : (1)调整左子树,并返回最大值连

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

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

二叉树的链表实现

直接上代码: /* 二叉树的链表实现: 以及三种遍历方式: author:天下无双 Date:2014-5-28 Version:2.0 */ #include <iostream> #include <string> typedef int T;//树内节点的数据类型 using namespace std; class BiTree { private: struct BiNode{ T data; BiNode *lchild,*rchild; BiNode(T d){ da

二叉树三种遍历递归及非递归实现(Java)

import java.util.Stack; //二叉树三种遍历递归及非递归实现(Java) public class Traverse { /******************定义二叉树**************************/ private final int MAX_SIZE = 10; //链式存储 public static class BinaryTreeNode { int mValue; BinaryTreeNode mLeft; BinaryTreeNode

二叉树遍历的非递归实现

二叉树的遍历可以使用递归的方式实现,并且代码非常简单.而递归实际就是函数反复的调用本身,在栈上反复压栈.所以我们可以用栈来模拟实现递归. 1.前序遍历 (1)栈是后进先出的特点,所以无条件的把栈的根节点入栈,在把栈顶元素输出之后依次把右孩子,左孩子压入栈中. 代码如下: void _PrevOrder(Node * root) { stack<Node*> s; if (root == NULL) { return; } s.push(root);//将第一个元素入栈 while (!s.em

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

递归逆转链表和递归合并有序链表的代码

#include <stdio.h> struct node { int val; struct node *pNext; }; struct node *gen() { struct node *pHead = NULL; for(int i = 10; i > 0; i--){ struct node * p = malloc(sizeof(struct node)); p -> val = i; p -> pNext = pHead; pHead = p; } retu

玩转数据结构:第5章 链表和递归

链表和递归 5-1 Leetcode中和链表相关的问题 Java类的递归,包含的成员变量有该类本身. ListNode //Definition for singly-linked list. public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } } /// Leetcode 203. Remove Linked List Elements/// http

101. 对称二叉树,c++迭代递归解法

101. 对称二叉树,c++迭代递归解法 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树?[1,2,2,3,4,4,3] 是对称的. 1 / 2 2 / \ / 3 4 4 3 但是下面这个?[1,2,2,null,3,null,3] 则不是镜像对称的: 1 / 2 2 \ 3 3 这道题可以用迭代和递归两种方法求解 迭代法代码如下,主要思想是,将树的左右分支放入两个队列中.因为题目是判断两个数是否对称,所以在将节点a的孩子放左队列时,先放a的右子结点,再放a的左子结点:在将节点b的孩子