线索二叉树的创建、中序遍历、左右插入
来源:互联网 发布:阿里云 数据库 编辑:程序博客网 时间:2024/06/13 20:00
#include <iostream>#include <stdio.h>using namespace std;struct binTreeNode{ char data; bool lthread,rthread; binTreeNode *lchild, *rchild;};//前序初始化:void creatBinTreePre(binTreeNode *&T){ char c; c = getchar(); if('^' == c) T = NULL; else{ T = new binTreeNode; T->data = c; creatBinTreePre(T->lchild); creatBinTreePre(T->rchild); }}//中序遍历创建:void inOrderThreading(binTreeNode *&T, binTreeNode *&pre){ if(T){ inOrderThreading(T->lchild,pre); if(!T->lchild){ T->lthread = true; T->lchild = pre; } if(!pre->rchild){ pre->rthread = true; pre->rchild = T; } pre = T; inOrderThreading(T->rchild,pre); }}//线索树的根节点初始化void inithread(binTreeNode *&T, binTreeNode *&root){ binTreeNode *pre = new binTreeNode; if( T ){ pre->lchild = T; pre->rchild = pre; root = pre; inOrderThreading(T, pre); pre->rthread = true; pre->rchild = root; } else{ pre->lchild = pre; pre->rchild = pre; }}//寻找结点的中序后继:binTreeNode *insucc(binTreeNode *tree){ binTreeNode *temp; temp = tree->rchild; if(!tree->rthread) while(!temp->lthread) temp = temp->lchild; return temp;}//线索树的中序遍历:void tinorder(binTreeNode *tree){ binTreeNode *temp = tree; while(1){ temp = insucc(temp); if(temp == tree) break; cout<<temp->data<<endl; }}//线索树的中序遍历寻找插入节点binTreeNode *findParentNode(char c, binTreeNode *tree){ binTreeNode *temp = tree; while(1){ temp =insucc(temp); if(temp == tree) break; if(temp->data == c) return temp; }}//右插入void insertRight(binTreeNode *parent, binTreeNode *child){ binTreeNode *temp = NULL; child->rchild = parent->rchild; child->rthread = parent->rthread; child->lchild = parent; child->lthread = true; parent->rchild = child; parent->rthread = false; if(!child->rthread){ temp = insucc(child); temp->lchild = child; }}//左插入void insertLeft(binTreeNode *parent, binTreeNode *child){ binTreeNode *temp = NULL; if(!parent->lthread){ temp = parent->lchild; while(insucc(temp) != parent){ temp = insucc(temp); } temp->rchild = child; temp->rthread = true; } child->lchild = parent->lchild; child->lthread = parent->lthread; child->rchild = parent; child->rthread = true; parent->lchild = child; parent->lthread = false;} int main() { binTreeNode *T = NULL, *root = NULL, *parent = NULL, *child = NULL; char c; creatBinTreePre( T ); inithread(T, root); cout<<"线索二叉树的中序遍历结果:\n"; tinorder(root); cout<<"------------右插入---------\n"; cout<<"请输入要插入的父母节点元素值:"; cin>>c; parent = findParentNode(c, root); cout<<"请输入要插入的孩子节点元素值:"; cin>>c; child = new binTreeNode; child->data = c; insertRight(parent, child); cout<<"线索二叉树右插入后的中序遍历结果:\n"; tinorder(root); cout<<"------------左插入---------\n"; cout<<"请输入要插入的父母节点元素值:"; cin>>c; parent = findParentNode(c, root); cout<<"请输入要插入的孩子节点元素值:"; cin>>c; child = new binTreeNode; child->data = c; insertLeft(parent, child); cout<<"线索二叉树左插入后的中序遍历结果:\n"; tinorder(root); return 0;}
0 0
- 线索二叉树的创建、中序遍历、左右插入
- 数据结构---线索二叉树的创建、中序遍历
- 数据结构 线索二叉树 创建 遍历 插入
- 中序线索二叉树的创建、线索化和遍历(前序遍历和后序遍历)
- 线索二叉树的中序遍历
- 【线索化二叉树】中序遍历创建线索二叉树
- 线索二叉树的创建极其遍历
- 中序二叉树、队列实现层次遍历、中序线索二叉树的创建与遍历
- 16.线索二叉树 (中序) 及 线索二叉树的中序遍历
- 线索二叉树的前、中、后序创建和遍历
- (十一)线索二叉树的创建和遍历(中序)
- 中序遍历线索二叉树
- 遍历中序线索二叉树
- 二叉树的中序遍历线索化
- 线索二叉树的建立和中序遍历
- 先序遍历/后序遍历创建线索二叉树
- 二叉树的线索化以及 线索化的先序,中序,后序遍历
- 二叉树线索化以及线索化的先序、中序、后序遍历
- 顺序表应用2:多余元素删除之建表算法
- 235. Lowest Common Ancestor of a Binary Search Tree LeetCode
- Mysql-5.6与Hibernate结合中文乱码
- Light OJ 1071 Baker Vai (DP)
- IoCompleteRequest routine
- 线索二叉树的创建、中序遍历、左右插入
- POJ3061尺取法和二分法
- HDU 2049 不容易系列之(4)——考新郎(错排)(递推)
- 328. Odd Even Linked List LeetCode
- 试题集—— 算法提高 学霸的迷宫
- 206. Reverse Linked List LeetCode
- 数据结构(6)--栈的应用之中缀表达式求值
- 程序员如何优雅度过一生的15个建议
- Spring学习笔记1:SpringMVC环境的搭建