c语言数据结构:递归的替代-------回溯算法
1.要理解回溯就必须清楚递归的定义和过程。
递归算法的非递归形式可采用回溯算法。主要考虑的问题在于:
- 怎样算完整的一轮操作。
- 执行的操作过程中怎样保存当前的状态以确保以后回溯访问。
- 怎样返回至上一次未执行的操作。
2.贴代码表现:
先序遍历二叉树:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stackar.h"
#include "fatal.h"
char U[100];
typedef struct TreeNode {
ElementType Element;
struct TreeNode *Left;
struct TreeNode *Right;
} BTNode;
BTNode *FindNode(BTNode *b,ElementType x)
{
//在二叉树中查找值为x的结点
BTNode *p;
if (b==NULL) return NULL;
else if (b->Element==x) return b;
else
{
p=FindNode(b->Left,x);
if (p!=NULL) return p;
else return FindNode(b->Right,x);
}
}
BTNode *CreateTree(BTNode *root)
{
//先序递归创建二叉树,
//输入范例:abd#g##e##cf#h###
//对应于: a(b(d(,g),e),c(f(,h),))
char ch;
scanf("%c",&ch);
if(ch=='#') {
//printf("--%c$$$\n",ch);
return NULL;
}
else
{
//printf("++%c***\n",ch);
root=(BTNode *)malloc(sizeof(BTNode));
root->Element=ch;
root->Left=CreateTree(root->Left);
root->Right=CreateTree(root->Right);
}
return root;
}
int pd(BTNode *b)
{
if(b->Left==NULL&&b->Right==NULL)
return 0;
if(b->Left!=NULL&&b->Right==NULL)
return 1;
if(b->Left==NULL&&b->Right!=NULL)
return 2;
if(b->Left!=NULL&&b->Right!=NULL)
return 3;
}
void prev(BTNode *b)
{
BTNode *f=b;
int i,j;
U[0]='|';
i=1;
for(;;)
{
for(;;)
{
j=0;
printf("%c",f->Element);
switch(pd(f))
{
case 0: { //当一个节点为叶子结点的时候开始回溯
j=1;break;
}
case 1:{
f=f->Left;break; //当一个节点有左孩子无右孩子的时候访问左孩子
}
case 2:{
f=f->Right;break; //当一个节点有右孩子无左孩子的时候访问右孩子
}
case 3:{
U[i++]=f->Element; //当一个节点有左孩子又有右孩子时存入节点的值
f=f->Left;break; //至字符数组U,以便以后回溯访问上一级。与此同时继续访问左孩子
} }
if(j==1)
break;
}
f=FindNode(b,U[i-1]); //根据U中最近保存的字符找出在原二叉树中相应的结点
if(--i==0)
break;
f=f->Right; //此时,应该访问回溯节点的右节点 //弹栈操作
}
}
void main()
{
BTNode *T,*p;
T=CreateTree(p);
prev(T); }
c语言数据结构:递归的替代-------回溯算法的更多相关文章
- C语言数据结构----递归的应用(八皇后问题的具体流程)
本节主要讲八皇后问题的基本规则和递归回溯算法的实现以及具体的代码实现和代码分析. 转载请注明出处.http://write.blog.csdn.net/postedit/10813257 一.八皇后问 ...
- C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)
本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...
- Java求解迷宫问题:栈与回溯算法
摘要: 使用栈的数据结构及相应的回溯算法实现迷宫创建及求解,带点JavaGUI 的基础知识. 难度: 中级 迷宫问题是栈的典型应用,栈通常也与回溯算法连用. 回溯算法的基本描述是: (1) 选择一个 ...
- C#数据结构与算法系列(十四):递归——八皇后问题(回溯算法)
1.介绍 八皇后问题,是一个古老而著名的问题,是回溯算法的经典案例,该问题是国际西洋棋棋手马克斯.贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即 任意两个皇后都不能处 ...
- 3、回溯算法解题套路框架——Go语言版
前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化
上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来 ...
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同 ...
- 回溯算法-C#语言解决八皇后问题的写法与优化
结合问题说方案,首先先说问题: 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 嗯,这个问题已经被使用各种语言解 ...
- C语言回溯算法解决N皇后问题
回溯算法的模型是 x++, not satisfy ? x-- : continue. 代码中x作列号,y[x]保存第x列上皇后放置的位置. #include<stdio.h> #incl ...
随机推荐
- sql通用分页自定义表条件存储过程
create PROCEDURE PrcTestByPage ( @tablename varchar(50), @selectfilter varchar(100), @orderbyfilter ...
- BASE64,MD5,SHA,HMAC加密與解密算法(java)
package com.ice.webos.util.security; import java.io.UnsupportedEncodingException; import java.math.B ...
- Linux 性能监测:介绍
看了某某教程.读了某某手册,按照要求改改某某设置.系统设定.内核参数就认为做到系统优化的想法很傻很天真:)系统优化是一项复杂.繁琐.长期的 工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采 ...
- (1)建立一个名叫Cat的类: 属性:姓名、毛色、年龄 行为:显示姓名、喊叫 (2)编写主类: 创建一个对象猫,姓名为“妮妮”,毛色为“灰色”,年龄为2岁,在屏幕上输 出该对象的毛色和年龄,让该对象调用显示姓名和喊叫两个方法。
package lianxi; public class Cat { String Name, Color; int Age; void getName() { System.out.println( ...
- NSIntger CGFloat NSNumber
NSIntger CGFloat NSNumber 1.NSIntger (long) %ld NSInteger a=; NSLog(@"----------%ld",(l ...
- 【转载】COM:IUnknown、IClassFactory、IDispatch
原文:COM:IUnknown.IClassFactory.IDispatch COM组件有三个最基本的接口类,分别是IUnknown.IClassFactory.IDispatch. COM规范规定 ...
- CSS3选择器 :nth-child(n) 详解
CSS3 :nth-child(n): http://demo.doyoe.com/css3/nth-child(n)/ 浏览器参照基准:IE9, Firefox, Chrome, Safari, O ...
- WEB前端开发工具的初识
准备学习BootStrap,然后发现好多插件啊…… 从一个开源项目开始学习吧. required node.js & bower & grunt $ git clone https:/ ...
- nslookup基础用法
简单介绍 简单介绍如下: 实例:查询163.com域名信息 D:>nslookup Default Server: ns-px.online.sh.cn Address: 202.96.209. ...
- Codeforces Round #257 (Div. 2) B
B. Jzzhu and Sequences time limit per test 1 second memory limit per test 256 megabytes input standa ...