问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求二叉树的层次遍历代码,求高手!!!

发布网友 发布时间:2022-04-24 10:03

我来回答

3个回答

懂视网 时间:2022-05-14 22:06

这篇文章主要介绍了关于js二叉树查询遍历插入翻转的代码,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

function BST(){
 this.root = null
 this.insert = insert
 this.find = find
 this.mirror = mirror;
 
 }
 function Node(data,left,right){
 this.data = data
 this.left = left
 this.right = right
 this.show = show
 }
 function show() {
 return this.data;
 }
 function mirror(root){
 if(root == null){
  return
 }
 if(root.left == null && root.right == null){
  return
 }
 let temp = root.left;
 root.left = root.right;
 root.right = temp;
 mirror(root.left)
 mirror(root.right)
 }
 function insert(data){
 var n = new Node(data,null,null)
 if(this.root == null){
  this.root = n
 }else{
  var current = this.root
  while(true){
  if(data < current.data){
   if(current.left == null){
   current.left = n
   break
   }
   current = current.left
  }else{
   if(current.right == null){
   current.right = n
   break
   }
   current = current.right
  }
  }
 }
 }
 function find(data){
 var current = this.root
 while(true){
  if(data == current.data){
  return current
  }
  current = data < current.data ? current.left : current.right
  if(current == null){
  return null
  }
 }
 }
 function inorder(node){
 if(!(node == null)){
  inorder(node.left)
  console.log(node.show())
  inorder(node.right)
 }
 }
 var nums = new BST()
 nums.insert(23)
 nums.insert(22)
 nums.insert(16)
 nums.insert(5)
 nums.insert(3)
 nums.insert(99)
 nums.insert(22)
 inorder(nums.root) 
 mirror(nums.root)
 console.log(nums.root)

很简单的 看就完了。

热心网友 时间:2022-05-14 19:14

#include "stdio.h"typedef int Datatype#define MAXNODE 100
//二叉链表的存储typedef struct BiTNode { Datatype data; struct BiTNode *lchild,*rchild;//左右孩子指针}BiTreeNode,*BiTree;
//三叉链表的存储typedef struct BiTNode { Datatype data; struct BiTNode *lchild,*rchild,*parent;}BiTreeNode,*BiTree;
//算法3.1:二叉树的先序遍历递归算法void PreOrder(BiTree bt){ if(bt!=NULL){ visit(bt->data);//访问根结点 PreOrder(bt->lchild); PreOrder(bt->rchild); }}
//算法3.2:二叉树的中序遍历递归算法void InOrder(BiTree bt){ if(bt!=NULL){ InOrder(bt->lchild); visit(bt->data); InOrder(bt->rchild); }}
//算法3.3:二叉树的后序遍历递归算法void InOrder(BiTree bt){ if(bt!=NULL){ InOrder(bt->lchild); InOrder(bt->rchild); visit(bt->data); }}
//算法3.4:二叉树的层次遍历算法void LevelOrder(BiTree bt){ BiTreeNode Queue[MAXNODE]; //定义队列 int front,rear; if(bt==NULL) return //空二叉树,遍历结束 front=-1; rear=0; Queue[rear]=bt; //根结点入队 while(rear!=front){ //队列不空,继续遍历;否则,遍历结束 front++; //出队 visit(Queue[front]->data); //访问刚出队的元素 if(Queue[front]->lchild!=NULL){ //如果有左孩子,左孩子入队 rear++; Queue[rear]=Queue[front]->lchild; } if(Queue[front]->rchild!=NULL){ //如果有右孩子,右孩子入队 rear++; Queue[rear]=Queue[front]->rchild; } }}
//算法3.5:中序遍历的非递归算法void NRInOrder(BiTree bt){ BiTree S[MAXNODE],p=bt;//定义栈 int top=-1; if(bt==NULL) return;//空二叉树,遍历结束 while(!(p==NULL&&top==0)){ while(p!=NULL){ if(top<MAXNODE-1) S[top++]=p;//当前指针p入栈 else{printf("栈溢出\n");return;} p=p->lchild;//指针指向p的左孩子结点 } if(top==-1) return //栈空,结束 else{ p=S[--top];//弹出栈顶元素 visit(p->data);//访问结点的数据域 p=p->rchild;//指向p的右孩子结点 } }}

//算法3.6:根据先序与中序遍历结果建立二叉树void PreInOrd(char preord[],char inord[],int i,int j,int k,int h,BiTree *t)//先序序列从i到j,中序序列从k到h,建立一个二叉树放到t中{ int m; (*t)=new BTNode; (*t)->data=preord[i];//二叉树的根 m=k; while (i[m]!=preord[i])m++;//在中序序列中定位树根 /********递归调用建立左子树******/ if(m==k)(*t)->left=NULL; else PreInOrd(preord,inord,i+1,i+m-k,k,m-1,&(*t)->left); /********递归调用建立左子树******/ if(m==k)(*t)->right=NULL; else PreInOrd(preord,inord,i+1,i+m-k,k,m-1,&(*))->right);}BTree * createBT(char preord[],char inord[],int n,BTree root)//n为二叉树接点的个数,建立的二叉树放在root中{ if(n<=0) root=NULL; else PreInOrd(preord,inord,1,n,1,n,&root) return root;}

//算法3.7:统计二叉树的叶子结点算法int BitreeLeaf(BTree bt) if(bt==NULL) return 0; if(bt->left==NULL & bt->right==NULL) return 1; return (BitreeLeaf(bt->left)+BirLeaf(bt->right));}

//算法3.8:求二叉树深度算法int BitreeDepth (BiTree bt){ if(bt==NULL) return 0; if(bt->lchild==NULL & bt->rchild==NULL) return1; depthL=BitreeDepth(bt->lchild); depthR=BitreeDepth(bt->rchild); return 1+max(depthL,depthR);}

//算法3.12:二叉树的查找算法BiTree SearchBST(BiTree bt,KeyType key){ if(bt==NULL || key==bt->data.key) return bt; if(key<bt->data.key) return SearchBST(bt->lchild,key); else return SearchBST(bt->rchild,key);}

//算法3.13:在二叉树中插入结点int InseartBST(BiTreeNode **bt,Datatype e){ BiTreeNode *qq=new BiTreeNode(),*pp=new BiTreeNode(); BiTreeNode **qq=&qq,*s,**p=&pp; *q=OxO; *p=OxO; if(SearchBST(*bt,e.key,p,q)==0)//待查结点是否在二叉排序树中 { s=new BiTreeNode(); s->data=e;s->lchild=s->rchild=OxO;//待查结点 if(!(*q)) *bt=s;//二叉树的根 else if(e.key<(*q)->data.key) (*q)->lchild=s;//作为左儿子插入 else(*q)->rchild=s;//作为右儿子插入 return 1; } else return 0;}

//算法3.14:在二叉排序树中删除结点int DeleteNode(BitreeNode **t,int key){ BiTreeNode *pp=new BiTreeNode(),*ff=new BiTreeNode; BiTreeNode **p=&pp,*s,*q,**f=&ff; *p=OxO;*f=OxO; int flag=0; if(SearchBST(*t,key,f,p)!=0){ flag=1;//查找成功,置删除标记,待删除结点为p if(!((*p)->rchild)){//结点无右儿子,结点只有一个分支或为叶子结点 if((*f)->lchild==*p) (*f)->lchild=(*P)->lchild; else (*f)->rchild=(*p)->lchild; } else{//结点有右儿子 if(!((*p)->lchild)){//结点无左儿子,一个分支 if((*f)->lchild==*p) (*f)->lchild=(*P)->rchild; else (*f)->rchild=(*p)->rchild; } else {//结点有左二子,两个分支 q=*p; s=(*p)->lchild; while(s->rchild){q=s;s=s->rchild;}//在结点p的左分支上沿右指针域往下找,直到右指针域为空时为止 (*p)->data=s->data; if(q!=*p){(q)->rchild=s->lchild;} else(q)->lcild=s->lchild; } } } return flag;}

热心网友 时间:2022-05-14 20:32

随便找一本数据结构的教材,里面肯定有
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 江西二套房首付比例,第一套房按揭已还完。 二叉树层次遍历怎么进行? 写一个java层次遍历二叉树,简单点就可以,我要的是代码,不是纯文字说明 九江二套房首付比例是多少? 编写算法实现对二叉树进行按层次遍历 二叉树层次遍历算法 层序遍历二叉树 南昌市区本人想买二套房,首付要付多少? 求二叉树的深度(深度优先)用栈 层次遍历建立二叉树 层次遍历一棵二叉树 江西省二套房贷首付多少 求高手编写一用层次遍历求二叉树深度的程序,谢谢 什么是二叉树宽度优先遍历 怎么用层次遍历(采用队列实现)求二叉树的深度。 求二叉树的宽度的程序 编写计算二叉树最大宽度的算法 绝地求生缺少dxgi.dll怎么办0v0 绝地求生缺少msvcp140.dll这个文件怎么办啊 求大神解决 有大佬吗 刚买的绝地求生 显示缺失这个dll 但是检查了目录并没有缺失 怎么办 给出层次遍历的结果 求建立二叉树的过程 成恩的介绍 韩国演员成恩的资料?图? 成恩过去有哪些作品 关于成恩的问题 成恩的出席活动 想减肥,谁知道吃什么主食能量底一些? 关于韩国歌手成恩的问题 吃什么食物能补充人体热量 成恩写西游记的写作背景。 北京成恩影视文化传媒有限公司怎么样? 减肥吃什么主食最好,减肥主食热量排行榜 求成恩早期的电影 吃一顿饭的热量是多少 上海成恩建筑劳务有限公司怎么样? 早餐吃什么主食热量最低? 情书第三季出演的具体人员 有人选择过长沙成恩教育填高考志愿吗? 这个是什么电影的,韩国的,名字是什么 减肥期间该吃什么?米饭热量高吗