中序线索二叉树的遍历(线索二叉树的遍历)

2024-07-13 01:51:13 29

中序线索二叉树的遍历(线索二叉树的遍历)

本文目录

线索二叉树的遍历

/ BiTree.cpp: implementation of the BiTree class.////////////////////////////////////////////////////////////////////////#include "BiTree.h"#include "iostream.h"#include"Queue.h"#include"stdio.h"//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////BiTree::BiTree(){ root=new BiTNode;}BiTree::~BiTree(){}void BiTree::createbitree(BiTNode *&root){ char ch; cin》》ch; if(ch==’#’) root=NULL; else { root=new BiTNode; root-》data=ch; createbitree(root-》lchild); createbitree(root-》rchild); }}void BiTree::PreTraver(BiTNode *root){ BiTNode *p; p=root; if(p!=NULL) { cout《《p-》data; PreTraver(p-》lchild); PreTraver(p-》rchild); }}void BiTree::InTraver(BiTNode *root){ BiTNode *p; p=root; if(p!=NULL) { PreTraver(p-》lchild); cout《《p-》data; PreTraver(p-》rchild); } }void BiTree::LaTraver(BiTNode *root){ BiTNode *p; p=root; if(p!=NULL) { PreTraver(p-》lchild); PreTraver(p-》rchild); cout《《p-》data; }}void BiTree::getroot(BiTNode *root){ cout《《root-》data;}int BiTree::BitTreeDepth(BiTNode *root){ int h1=0,h3=0,h=0; if(root==NULL) h=0; else { h1=BitTreeDepth(root-》lchild); h3=BitTreeDepth(root-》rchild); if (h1》h3) h=h1+1; else h=h3+1; } return h; }void BiTree::getparent(char ch,BiTNode *root){ BiTNode *a; a=root; if(root!=NULL) { if((a-》lchild!=NULL&&a-》lchild-》data==ch)||(a-》rchild&&a-》rchild-》data==ch)) { cout《《a-》data; } else { getparent(ch,root-》lchild); getparent(ch,root-》rchild); } }}int BiTree::getleaf(BiTNode *root,int #){ BiTNode *p; p=root; if(p!=NULL) { if(p-》lchild==NULL&&p-》rchild==NULL) { num++; cout《《p-》data; } else { getleaf(p-》lchild,num); getleaf(p-》rchild,num); } } return num;}int BiTree::getnum(BiTNode *root,int #){ BiTNode *p; p=root; if(p!=NULL) { num++; getnum(p-》lchild,num); getnum(p-》rchild,num); } return num;}int BiTree::getdu1(BiTNode *root, int& num){ BiTNode *p; p=root; if(p!=NULL) { if((p-》lchild!=NULL&&p-》rchild==NULL)||(p-》lchild==NULL&&p-》rchild!=NULL)) { cout《《p-》data; num++; } else { getdu1(p-》lchild,num); getdu1(p-》rchild,num); } } return num;}int BiTree::getdu2(BiTNode *root,int#){ BiTNode *p; p=root; if(p!=NULL) { if(p-》lchild!=NULL&&p-》rchild!=NULL) { cout《《p-》data; num++; } else { getdu2(p-》lchild,num); getdu2(p-》rchild,num); } }return num;}void BiTree::guangdu(BiTNode *root,Queue &Q){ //Q.InitQueue(Q); if(root!=NULL) Q.EnQueue(root-》data); while(!Q.QueueEmpty()) { Q.DeQueue(root-》data); cout《《root-》data; if(root-》lchild!=NULL) Q.EnQueue(root-》lchild-》data); if(root-》rchild!=NULL) Q.EnQueue(root-》rchild-》data); }}struct BiTNode{ char data; BiTNode *lchild,*rchild,*parent;};class BiTree { BiTNode *root; public: BiTree(); virtual ~BiTree(); void createbitree(BiTNode *&t);//要加引用修改根因为根是变化的 void getroot(BiTNode *t); void getparent(char ch,BiTNode *t); void getlchild(char t,char x); void getrchild(char t,char x); void TraverTree(char t); int BitTreeDepth(BiTNode *t); //void insertChild(BiTree& T,char t,char); void PreTraver(BiTNode *r); void InTraver(BiTNode *r); void LaTraver(BiTNode *r); int getleaf(BiTNode *r,int &t); int getnum(BiTNode *r,int &t); void guangdu(BiTNode *r,Queue &Q); int getdu1(BiTNode*r,int &t); int getdu2(BiTNode*r,int &t); bool IserTree();};#include"iostream.h"#include"BiTree.h"#include"stdio.h"void main(){ BiTree choose; Queue qe; int select=10; while(select!=0) { cout《《"****************请按数字键操作********************"《《endl; cout《《"1---前序创建二叉树."《《endl; cout《《"2---前序遍历输出二叉树."《《endl; cout《《"3---中序遍历输出二叉树."《《endl; cout《《"4---后序遍历输出二叉树."《《endl; cout《《"5---求树的根结点。"《《endl; cout《《"6---求二叉树的高度"《《endl; cout《《"7---求结点的双亲"《《endl; cout《《"8---求二叉树的叶子及叶子数"《《endl; cout《《"9---求结点的个数"《《endl; cout《《"10---求度为1的结点"《《endl; cout《《"11---求度为2的结点 "《《endl; cout《《"12---判断是否为完全二叉树 "《《endl; cout《《"13---广度优先遍历输出"《《endl; cout《《"**************************************************"《《endl; cin》》select; switch(select) { case 1: cout《《"请输入一个二叉树#为空"《《endl; BiTNode *root; choose.createbitree(root); break; case 2: cout《《"该树是:"; choose.PreTraver(root); cout《《endl; break; case 3: cout《《"该树是:"; choose.InTraver(root); cout《《endl; break; case 4: cout《《"该树是:"; choose.LaTraver(root); cout《《endl; break; case 5: cout《《"根结点是:"; choose.getroot(root); cout《《endl; break; case 6: cout《《"该二叉树的深度是:"; int h; h=choose.BitTreeDepth(root); cout《《h; cout《《endl; break; case 7: char ch; cout《《"请输入所要求的结点:"; cin》》ch; cout《《"根结点是:"; choose.getparent(ch,root); cout《《endl; break; case 8: int number; number=0; int num; cout《《"该二叉树的叶子是:"; num=choose.getleaf(root,number); cout《《"该二叉树的叶子个数是:"; cout《《num; cout《《endl; break; case 9: int k; k=0; int m; m=choose.getnum(root,k); cout《《"该二叉树的结点数是:"; cout《《m; cout《《endl; break; case 10: int n,i; i=0; //cout《《"度为1的结点是:"; n=choose.getdu1(root,i); if(n!=0) cout《《"输出的值就是度为1的结点"; else cout《《"度为1的结点没有"; cout《《endl; break; case 11: //cout《《"度为2的结点是:"; n=choose.getdu2(root,i); if(n!=0) { cout《《endl; cout《《"输出的数值就是度为2的结点"; } else cout《《"度为二的结点没有"; cout《《endl; break; case 13: choose.guangdu(root,qe); cout《《endl; break; } }}#include "Queue.h"#include"stdio.h"#include"iostream.h"//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////Queue::Queue(){ rear=NULL; front=new QNode;}Queue::~Queue(){}void Queue::InitQueue(){ QNode *front,*rear; front=new QNode; //rear=new QNode; if(!front)//生成头结点失败 cout《《"失败"; front-》next=NULL;}bool Queue::QueueEmpty() { //判断队列是否为空 if(front-》next==NULL) return true; else return false; }void Queue::EnQueue(char &e) { //插入元素e为队列Q的新的队尾元素 QNode *p; p=new QNode; rear=new QNode; //动态生成新结点 //if(!p) //exit(OVERFLOW); p-》data=e;//将e的值赋给新结点 p-》next=NULL;//新结点的指针为空 rear-》next=p;//原队尾结点的指针域为指向新结点 rear=p;//尾指针指向新结点 }char Queue::DeQueue(char &e) { //若队列不为空,删除Q的队头元素,用e返回其值 QNode *p; if(front==rear)//队列为空 cout《《"队列为空"; else {p=front-》next; rear-》next=p;//p指向队头结点 e=rear-》next-》data;//队头元素赋给e front-》next=p-》next; rear-》next=p-》next; }//头结点指向下一个结点 if(rear==p)//如果删除的队尾结点 rear=front;//修改队尾指针指向头结点 delete p; return e; }struct QNode{ char data; QNode *next;};class Queue { //QNode *rear,*front; public: QNode *rear,*front; Queue(); bool QueueEmpty(); virtual ~Queue(); void InitQueue(); void EnQueue(char &e); char DeQueue(char &e);};顺序有点乱你自己看看把除了你说的还有其他的功能,做一下参考吧

线索化后二叉树的遍历算法

兄弟,你哪的人?我也在做这个课程设计.(题完全一样哈)目前把中序遍历线索化二叉树做出来了,加我QQ:450104299代码如下:#include 《stdio.h》 #include 《iostream.h》 #include 《malloc.h》 #include《stdlib.h》 typedef char DataType;//定义DataType类型 typedef enum PointerTag{Link,Thread}; typedef struct BiThrNode{ DataType data; struct BiThrNode *lchild, *rchild;//左右孩子子树 PointerTag LTag,RTag; }BiThrNode; //结点类型typedef BiThrNode *BiThrTree ;//二叉树类型void CreatBinTree(BiThrTree &T) //构造二叉链表,注意:输入序列是先序序列 { char ch;scanf("%c",&ch);if (ch==’#’) T=NULL; else //读入非空格{ T=(BiThrTree )malloc(sizeof(BiThrNode));//生成结点T-》data=ch;T-》LTag=Link;T-》RTag=Link; CreatBinTree(T-》lchild); //构造左子树 CreatBinTree(T-》rchild); //构造右子树}} BiThrTree pre;//全局变量void InThreading(BiThrTree p) { if(p) { InThreading(p-》lchild);//左子树线索化 if(!p-》lchild) {p-》LTag=Thread;p-》lchild=pre;}//前驱线索if(!pre-》rchild) {pre-》RTag=Thread;pre-》rchild=p;}//后继线索pre=p;//保持pre指向p InThreading(p-》rchild);//右子树线索化} } void InOrderThreading(BiThrTree &Thrt,BiThrTree T) //中序遍厉二叉树T,并将其中序线索化,Thrt指向头结点{ if(!(Thrt=(BiThrTree)malloc(sizeof(BiThrNode)))) exit(0); Thrt-》LTag=Link; Thrt-》RTag=Thread;//建头结点Thrt-》rchild=Thrt;//右指针回指 if(!T) Thrt-》lchild=Thrt; else { Thrt-》lchild=T; pre=Thrt; InThreading(T);//中序遍历进行中序线索化pre-》rchild=Thrt;pre-》RTag=Thread;//最后一个结点线索化Thrt-》rchild=pre; } } void print(BiThrTree e) {printf("%d%c%d\n",e-》LTag,e-》data,e-》RTag);} void InOrderTraverse(BiThrTree T,void (* visit)(BiThrTree e)) //T指向头结点,头结点的左链lchild指向根结点,中序遍厉二叉树{BiThrTree p; p=T-》lchild;//p指向根结点while(p!=T)//空树或遍厉结束时,p==T{while(p-》LTag==Link) p=p-》lchild; printf("%c ",p-》data); //打印 while(p-》RTag==Thread&&p-》rchild!=T) {p=p-》rchild;printf("%c ",p-》data);}//访问后继结点 p=p-》rchild; }printf("\n"); } void main() //测试程序 { printf("按先序序列输入二叉树各结点:\n");BiThrTree T,Thrt; CreatBinTree(T); InOrderThreading(Thrt,T); printf("中序法遍历线索化二叉树:\n");InOrderTraverse(Thrt,print); }

在遍历中序线索二叉树时,某结点既有左子树又有右子树,那么它的前驱是其

D,中序即左中右的顺序,显然在访问时先访问结点N的左子树,而对于结点N的左子树,仍然按照左中右的顺序访问,故对该左子树,最后访问其最右下的结点,然后就会访问N,所以,对于结点N,其中序前驱是其左子树最右下的结点。

已知某二叉树的后序遍历和中序遍历的序列分别为

您好,你的问题,我之前好像也遇到过,以下是我原来的解决思路和方法,希望能帮助到你,若有错误,还望见谅!已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历是DGEBHFCA。前序遍历的第一个节点为根节点,由前序遍历可知,A为根节点。中序遍历的根节点前面的节点均为左子树的节点,所以左子树上的节点为DBGE。去掉根节点和左子树节点,右子数节点为CHF。前序遍历的第二个节点为B,由2知B为左子树节点,所以B为左子树的根节点。由前序遍历,DEG在B节点下面,由中序遍历,D是B的左节点,GE是B的右节点。由前序遍历,E是G的根节点,由中序遍历,G是E的左子节点。由前序遍历,C是二叉树的右根节点,由中序遍历,C不含左子节点,HF为C的右子节点。由前序遍历,F为H的根节点,由中序遍历,H为F的左子节点。在二叉树中,求后序遍历,先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。则该二叉树的后序遍历是DGEBHFCA。扩展资料:非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!

数据结构 线索二叉树 中序遍历 高手们帮忙看看哪错了啊

你的那个线索化二叉树中的pre参数应该是全局的,想想是吗?下面是用c++写的代码,希望对你有用:树结点文件:#ifndef THREADTREENODE_H#define THREADTREENODE_Htemplate《class T》class ThreadTreeNode{public:T data;int lTag;int rTag;ThreadTreeNode《T》 * L_child;ThreadTreeNode《T》 * R_child;ThreadTreeNode(){lTag=0;rTag=0;L_child=NULL;R_child=NULL;}};#endif穿线二叉树的文件:#ifndef THREADTREE_H#define THREADTREE_H#include《iostream》#include《stack》#include《fstream》#include"ThreadTreeNode.h"#include"node_infor.h"using namespace std;template《class T》class ThreadTree{public:ThreadTree();~ThreadTree();void InThread();void InThread(ThreadTreeNode《T》 * root,ThreadTreeNode《T》 * & pre);void In_order();void InThread_test();ThreadTreeNode《T》 * FindNext_pre(ThreadTreeNode《T》 * pointer);ThreadTreeNode《T》 * Find_Node(const T & ele);void Find_Test();void Insert_Node(ThreadTreeNode《T》 * pointer,ThreadTreeNode《T》 * newpointer);void Insert_Test();ThreadTreeNode《T》 * FindPre_post(ThreadTreeNode《T》 * pointer);void Pre_order();//void Post_order();ThreadTreeNode《T》 * FindIn_pre(ThreadTreeNode《T》 * pointer);private:void creat_tree();void dele_tree(ThreadTreeNode《T》 * root);void visit(ThreadTreeNode《T》* pointer);ThreadTreeNode《T》 * root;node_infor《T》 store_infor;int count;};template《class T》ThreadTree《T》::ThreadTree(){cout《《"前序构造二叉树!"《《endl;count=0;ifstream in("store_infor.txt");while(!in.eof()){in》》store_infor.data;in》》store_infor.ltag;in》》store_infor.rtag;count++;}in.close();creat_tree();}template《class T》void ThreadTree《T》::creat_tree(){ThreadTreeNode《T》 * pointer;ThreadTreeNode《T》 * temp_pointer;stack《ThreadTreeNode《T》*》 creat_help;root=new ThreadTreeNode《T》;pointer=root;for(int i=0;i《count-1;i++){pointer-》data=store_infor.data;if(store_infor.rtag==1){creat_help.push(pointer);}temp_pointer=new ThreadTreeNode《T》;if(store_infor.ltag==1){pointer-》L_child=temp_pointer;}else{pointer=creat_help.top();creat_help.pop();pointer-》R_child=temp_pointer;}pointer=temp_pointer;}pointer-》data=store_infor.data;}template《class T》void ThreadTree《T》::visit(ThreadTreeNode《T》* pointer){cout《《pointer-》data《《" ";}template《class T》void ThreadTree《T》::InThread(ThreadTreeNode《T》 * root,ThreadTreeNode《T》 * & pre){if(root!=NULL){InThread(root-》L_child,pre);}else{return;}if(root-》L_child==NULL && pre){root-》lTag=1;root-》L_child=pre;}if(pre && pre-》R_child==NULL){pre-》rTag=1;pre-》R_child=root;}pre=root;InThread(root-》R_child,pre);}template《class T》void ThreadTree《T》::InThread(){ThreadTreeNode《T》 * pointer=root;ThreadTreeNode《T》 * pre_pointer=NULL;stack《ThreadTreeNode《T》*》 InThread_help;while(true){while(pointer) { InThread_help.push(pointer); pointer=pointer-》L_child; }if(InThread_help.empty())return;pointer=InThread_help.top();InThread_help.pop();if(pointer-》L_child==NULL && pre_pointer){pointer-》lTag=1;pointer-》L_child=pre_pointer;}if(pre_pointer && pre_pointer-》R_child==NULL){pre_pointer-》rTag=1;pre_pointer-》R_child=pointer;}pre_pointer=pointer;pointer=pointer-》R_child;} }template《class T》void ThreadTree《T》::InThread_test(){ThreadTreeNode《T》 * pre=NULL;InThread(root,pre);//InThread();}template《class T》ThreadTreeNode《T》 * ThreadTree《T》::FindNext_pre(ThreadTreeNode《T》 * pointer){if(pointer-》lTag==0 && pointer-》L_child!=NULL){return pointer-》L_child;}while(pointer-》rTag==1){pointer=pointer-》R_child;}return pointer-》R_child;}template《class T》ThreadTreeNode《T》 * ThreadTree《T》::Find_Node(const T & ele){ThreadTreeNode《T》 * pointer=root;while(pointer-》L_child){pointer=pointer-》L_child;}while(true){if(pointer-》data==ele){return pointer;}else if(pointer-》R_child==NULL){return NULL;}else if(pointer-》rTag==1){pointer=pointer-》R_child;}else{pointer=pointer-》R_child;while(pointer-》lTag==0){pointer=pointer-》L_child;}}}}template《class T》ThreadTreeNode《T》 * ThreadTree《T》::FindPre_post(ThreadTreeNode《T》 * pointer){if(pointer-》rTag==0 && pointer-》R_child!=NULL){return pointer-》R_child;}else if(pointer-》lTag==0){return pointer-》L_child;}else{pointer=pointer-》L_child;while(pointer-》lTag==1){pointer=pointer-》L_child;}return pointer;}}template《class T》ThreadTreeNode《T》 * ThreadTree《T》::FindIn_pre(ThreadTreeNode《T》 * pointer){if(pointer-》lTag==1){return pointer-》L_child;}if(pointer-》L_child==NULL){return NULL;}pointer=pointer-》L_child;while(pointer-》rTag==0){pointer=pointer-》R_child;}return pointer;}template《class T》void ThreadTree《T》::Find_Test(){cout《《"查找前序的后继!"《《endl;cout《《"请输入元素:"《《endl;T ele;cin》》ele;if(ThreadTreeNode《T》 * pointer=FindNext_pre(Find_Node(ele))){visit(pointer);cout《《endl;}else{cout《《"无此相关项!"《《endl;}cout《《"查找后序下的前继"《《endl;cout《《"请输入元素:"《《endl;cin》》ele;if(ThreadTreeNode《T》 * pointer=FindPre_post(Find_Node(ele))){visit(pointer);cout《《endl;}else{cout《《"无此相关项!"《《endl;}cout《《"查找中序下的前继!"《《endl;cout《《"请输入元素:"《《endl;cin》》ele;if(ThreadTreeNode《T》 * pointer=FindIn_pre(Find_Node(ele))){visit(pointer);cout《《endl;}else{cout《《"无此相关项!"《《endl;}}template《class T》void ThreadTree《T》::Pre_order(){if(root==NULL){return;}cout《《"前序周游:"《《endl;ThreadTreeNode《T》 * pointer=root;while(true){while(pointer-》lTag==0){visit(pointer);if(pointer-》L_child==NULL){break;}pointer=pointer-》L_child;}if(pointer-》lTag==1) visit(pointer);if(pointer-》R_child==NULL){cout《《endl;return;}while(pointer-》rTag==1){pointer=pointer-》R_child;}pointer=pointer-》R_child;}}//template《class T》/*void ThreadTree《T》::Post_order(){if(root==NULL)return;cout《《"后序周游:"《《endl;ThreadTreeNode《T》 * pointer=root;while(true){while(pointer-》lTag==0){if(pointer-》L_child==NULL)break;pointer=pointer-》L_child;}if(pointer-》rTag==1 || pointer-》R_child==NULL){visit(pointer);if(pointer-》rTag==1)pointer=pointer-》R_child;}pointer}}*/template《class T》void ThreadTree《T》::In_order(){if(root==NULL)return;cout《《"中序周游:"《《endl;ThreadTreeNode《T》 * pointer=root;while(pointer-》L_child!=NULL){pointer=pointer-》L_child;}while(true){visit(pointer);if(pointer-》R_child==NULL){cout《《endl;return;}if(pointer-》rTag==1){pointer=pointer-》R_child;}else{pointer=pointer-》R_child;while(pointer-》lTag==0){pointer=pointer-》L_child;}}}}template《class T》void ThreadTree《T》::Insert_Node(ThreadTreeNode《T》 * pointer,ThreadTreeNode《T》 * newpointer){ThreadTreeNode《T》 * temp_pointer;if(pointer-》R_child==NULL){temp_pointer=NULL;}else if(pointer-》rTag==1){temp_pointer=pointer-》R_child;}else{temp_pointer=pointer-》R_child;while(temp_pointer-》lTag==0){temp_pointer=temp_pointer-》L_child;}}/*pointer-》R_child=newpointer;newpointer-》R_child=pointer-》R_child;newpointer-》lTag=1;newpointer-》L_child=pointer;newpointer-》rTag=pointer-》rTag;pointer-》rTag=0;*/if(temp_pointer!=NULL && temp_pointer-》lTag==1){temp_pointer-》L_child=newpointer;}newpointer-》lTag=1;newpointer-》L_child=pointer;newpointer-》R_child=pointer-》R_child;newpointer-》rTag=pointer-》rTag;pointer-》R_child=newpointer;pointer-》rTag=0;}template《class T》void ThreadTree《T》::Insert_Test(){cout《《"结点插入,位置是指定结点在中序下的后继!"《《endl;cout《《"请输入指定结点的元素:"《《endl;T ele;cin》》ele;cout《《"请输入新结点的元素:"《《endl;T new_ele;cin》》new_ele;ThreadTreeNode《T》 * newpointer=new ThreadTreeNode《T》;newpointer-》data=new_ele;Insert_Node(Find_Node(ele),newpointer);}template《class T》void ThreadTree《T》::dele_tree(ThreadTreeNode《T》 * root){if(root!=NULL && root-》lTag==0 && root-》rTag==0){dele_tree(root-》L_child);dele_tree(root-》R_child);delete root;}}template《class T》ThreadTree《T》::~ThreadTree(){dele_tree(root);}#endif

建立中序线索二叉树,并且中序遍历; 2. 求中序线索二叉树上已知结点中序的前驱和后继

.在后序序列中,若结点p有右子女,则右子女是其前驱,若无右子女而有左子女,则左子女是其前驱。若结点p左右子女均无,设其中序左线索指向某祖先结点f(p是f右子树中按中序遍历的第一个结点),若f有左子女,则其左子女是结点p在后序下的前驱;若f无左子女,则顺其前驱找双亲的双亲,一直继续到双亲有左子女(这时左子女是p的前驱)。还有一种情况,若p是中序遍历的第一个结点,结点p在中序和后序下均无前驱。bithrtreeinpostpre(bithrtreet,p)//在中序线索二叉树t中,求指定结点p在后序下的前驱结点q{bithrtreeq;if(p-》rtag==0)q=p-》rchild;//若p有右子女,则右子女是其后序前驱elseif(p-》ltag==0)q=p-》lchild;//若p无右子女而有左子女,左子女是其后序前驱。elseif(p-》lchild==null)q=null;//p是中序序列第一结点,无后序前驱else//顺左线索向上找p的祖先,若存在,再找祖先的左子女{while(p-》ltag==1&&p-》lchild!=null)p=p-》lchild;if(p-》ltag==0)q=p-》lchild;//p结点的祖先的左子女是其后序前驱elseq=null;//仅右单枝树(p是叶子),已上到根结点,p结点无后序前驱}return(q);}//结束inpostpre

简述中序线索二叉树的构造方法

直接利用递归的中序遍历算法来完成,中间需要一个指向前驱结点的指针,初值为空1、递归中序遍历左子树2、访问某个结点时,同时修改前驱指向自己(如果有)和自己指向前驱(如果有)的线索与标志完了后,前驱移动指向当前结点3、递归中序遍历右子树

给定如图所示二叉树T,请画出与其对应的中序线索二叉树

根据中顺遍历方法  先范访问左子树  结点  右子树   :

中序遍历: 55 40 25  60 28  08  33 54

如图:

  

  满意的话  记得给分哦~ 

中序线索二叉树的遍历(线索二叉树的遍历)

本文编辑:admin

更多文章:


植物大战僵尸英雄下载(植物大战僵尸英雄卡牌破解版在哪里下载)

植物大战僵尸英雄下载(植物大战僵尸英雄卡牌破解版在哪里下载)

大家好,如果您还对植物大战僵尸英雄下载不太了解,没有关系,今天就由本站为大家分享植物大战僵尸英雄下载的知识,包括植物大战僵尸英雄卡牌破解版在哪里下载的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录植物大战僵尸英雄卡

2024年6月16日 10:36

万能u盘驱动程序(如何修复u盘驱动器)

万能u盘驱动程序(如何修复u盘驱动器)

本文目录如何修复u盘驱动器U盘插进电脑显示找不到驱动的安装程序是怎么回事啊如何修复u盘驱动器一、系统自带驱动解决 点击计算机--右--设备管理器,打开设备管理器。打开“通用串行总线控制器”。插入不被识别的U盘,等待一小会儿,相应的US

2024年6月27日 05:24

龙之谷职业选择(龙之谷,什么职业比较强大!)

龙之谷职业选择(龙之谷,什么职业比较强大!)

本文目录龙之谷,什么职业比较强大!龙之谷那个职业好端游龙之谷所有职业有哪些龙之谷手游推荐玩什么职业刚玩龙之谷,选什么职业好龙之谷,什么职业比较强大!先说战士(转战神和剑圣) 战士是所有职业里最容易上手的 操作简单 冲上去砍就可以了 刷

2024年6月12日 16:40

比特币客户端下载(要是现在有一个比特币,怎么才能把它变成人民币呢)

比特币客户端下载(要是现在有一个比特币,怎么才能把它变成人民币呢)

本文目录要是现在有一个比特币,怎么才能把它变成人民币呢比特币谁发明的比特币机器是怎么运转的炒比特币犯法吗请大神赐教怎么查自己名下有没有比特币比特币怎么挖出来的比特币钱包地址怎么获得要是现在有一个比特币,怎么才能把它变成人民币呢比特币变现目前

2024年2月11日 08:00

撕衣服模拟器游戏下载破解版(撕衣服的游戏手机游戏)

撕衣服模拟器游戏下载破解版(撕衣服的游戏手机游戏)

本文目录撕衣服的游戏手机游戏单机撕帅哥衣服小游戏下载求安卓版成人手机游戏,我手机是的HTC G12,不要那些撕衣之类的,谢了三星手机如何下载撕衣服游戏打工生活模拟器内购版怎么下载撕衣服的游戏手机游戏救赎是由女神之泪和巨人腰带两件装备合成的。

2024年7月18日 08:24

剑侠情缘三官网地址是什么?剑三怎么查积分兑换记录查询

剑侠情缘三官网地址是什么?剑三怎么查积分兑换记录查询

这篇文章给大家聊聊关于剑三官网,以及剑侠情缘三官网地址是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录剑侠情缘三官网地址是什么剑三怎么查积分兑换记录查询剑网三5173买的账号,怎样分离到自己身份注册的账号上剑网三怎么查消

2024年7月24日 13:16

如何使用手机导航地图?下载高德地图2022最新版手机导航安装不了

如何使用手机导航地图?下载高德地图2022最新版手机导航安装不了

大家好,如果您还对手机导航不太了解,没有关系,今天就由本站为大家分享手机导航的知识,包括如何使用手机导航地图的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录如何使用手机导航地图下载高德地图2022最新版手机导航安装

2024年4月25日 04:35

诛仙端游官网首页(诛仙里面怎么查自己的账号在那个服务器建的角色啊)

诛仙端游官网首页(诛仙里面怎么查自己的账号在那个服务器建的角色啊)

本篇文章给大家谈谈诛仙端游官网首页,以及诛仙里面怎么查自己的账号在那个服务器建的角色啊对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录诛仙里

2024年7月23日 07:48

flyme魅族游戏中心(魅族fly me游戏账号怎么在其他手机里登陆)

flyme魅族游戏中心(魅族fly me游戏账号怎么在其他手机里登陆)

各位老铁们好,相信很多人对flyme魅族游戏中心都不是特别的了解,因此呢,今天就来为大家分享下关于flyme魅族游戏中心以及魅族fly me游戏账号怎么在其他手机里登陆的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文

2024年5月22日 01:14

大白菜u盘启动工具(大白菜超级U盘启动制作工具,这4个模式都是什么意思)

大白菜u盘启动工具(大白菜超级U盘启动制作工具,这4个模式都是什么意思)

本文目录大白菜超级U盘启动制作工具,这4个模式都是什么意思大白菜超级u盘启动制作工具大白菜u盘启动制作工具把下好的程序放哪啊大白菜u盘启动制作工具 制作启动U盘如何制作大白菜u盘启动盘大白菜超级u盘启动制作工具怎么用大白菜超级U盘启动盘制作

2024年1月17日 07:00

在线检测电脑配置(WeGame如何检测电脑配置)

在线检测电脑配置(WeGame如何检测电脑配置)

本文目录WeGame如何检测电脑配置哪里看电脑配置参数win7系统如何在线检测电脑配置WeGame如何检测电脑配置1,首先我们点击桌面上的“WeGame”图标,打开Wegame客户端,输入用户名和密码进行登录。2,点击“登录”之后,稍等片刻

2024年5月17日 16:23

固态硬盘笔记本(笔记本电脑固态硬盘和机械硬盘哪个好,区别是什么)

固态硬盘笔记本(笔记本电脑固态硬盘和机械硬盘哪个好,区别是什么)

本文目录笔记本电脑固态硬盘和机械硬盘哪个好,区别是什么笔记本电脑固态硬盘是什么意思 固态硬盘介绍笔记本的固态硬盘是什么意思笔记本可以装固态硬盘么笔记本电脑自带固态硬盘好吗笔记本如何装固态硬盘笔记本使用固态硬盘有什么好处笔记本 512g固态硬

2024年5月3日 07:23

QQ英雄岛用英雄岛下载器怎么下载不了?qq英雄岛下载不下来

QQ英雄岛用英雄岛下载器怎么下载不了?qq英雄岛下载不下来

本文目录QQ英雄岛用英雄岛下载器怎么下载不了qq英雄岛下载不下来英雄道怎么点亮图标QQ英雄岛用英雄岛下载器怎么下载不了很高兴为您解答可以的,只不过您电脑上垃圾文件软件太多强烈建议您把 杀毒软件卸载掉,用优化大师优化一下电脑清理一下垃圾。然后

2024年7月11日 14:13

免费起名软件哪个好用(下载什么软件可以给宝宝起名,给孩子起名字用的工具书有哪些)

免费起名软件哪个好用(下载什么软件可以给宝宝起名,给孩子起名字用的工具书有哪些)

大家好,免费起名软件哪个好用相信很多的网友都不是很明白,包括下载什么软件可以给宝宝起名,给孩子起名字用的工具书有哪些也是一样,不过没有关系,接下来就来为大家分享关于免费起名软件哪个好用和下载什么软件可以给宝宝起名,给孩子起名字用的工具书有哪

2024年4月17日 16:10

国外酒店订房网有哪些?国内酒店预订网站排名

国外酒店订房网有哪些?国内酒店预订网站排名

本文目录国外酒店订房网有哪些国内酒店预订网站排名特价酒店预订网出国旅游订酒店,哪些网站比较靠谱国外酒店订房网有哪些  您好,艺龙的酒店预订价格相对比较的优惠;并且推出消费券等返现活动;价格更为优惠的团购产品;成熟的售后服务团队。  您可以直

2024年6月6日 12:02

数据库软件免费下载(有没有操作简单的现成数据库)

数据库软件免费下载(有没有操作简单的现成数据库)

本文目录有没有操作简单的现成数据库Mac电脑中有哪些免费的通用的数据库工具大家常用哪个MySQL客户端工具,除了命令行那个mysql之外哪里可以找到通用的数据库可视化工具有完全免费的数据库软件么我最近想使用一款数据库软件,数据源主要是来自于

2023年6月7日 05:20

oa系统服务器地址在哪里看(汉阳oa服务器地址)

oa系统服务器地址在哪里看(汉阳oa服务器地址)

“oa系统服务器地址在哪里看”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看oa系统服务器地址在哪里看(汉阳oa服务器地址)!本文目录汉阳oa服务器地址oa地址是什么办公OA客户端外网地址,内网地址指的是什么,初次登录怎么设

2024年8月15日 02:30

英雄联盟手游预约(有什么软件可以预约英雄联盟手游嘛)

英雄联盟手游预约(有什么软件可以预约英雄联盟手游嘛)

本文目录有什么软件可以预约英雄联盟手游嘛请问英雄联盟手游怎么预约的啊请问英雄联盟手游在哪里可以预约怎么样才能玩到英雄联盟手游在哪里预约《英雄联盟》手游英雄联盟手游的资格申请需要预约吗请问一下怎么样才能玩到英雄联盟手游英雄联盟手游的资格申请在

2024年1月16日 10:00

未能更新iphone发生未知错误3194(Iphone恢复固件时出现3194错误怎么办)

未能更新iphone发生未知错误3194(Iphone恢复固件时出现3194错误怎么办)

本文目录Iphone恢复固件时出现3194错误怎么办iphone错误3194怎么解决iTunes恢复iPhone固件发生未知错误3194怎么办itunes更新固件时出现3194错误iphone更新时发生未知错误3194是什么意思如何解决苹果

2024年7月2日 11:49

preior什么意思?prior的比较级和最高级

preior什么意思?prior的比较级和最高级

本篇文章给大家谈谈prior,以及preior什么意思对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录preior什么意思prior的比较级

2024年7月5日 12:00

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1154
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1151
标签列表

热门搜索