R语言の二叉树

来源:互联网 发布:js绘制流程图的插件 编辑:程序博客网 时间:2024/06/05 08:12
#类:BinaryTree#功能:二叉树,左子树小于根节点,右子树大于根节点#思路:printTree():打印树 newTree():创建空树 insertTree()插入树newTree<-function(root,size)#root:根节点的值 size:树的大小{tree<-matrix(rep(NA,size*3),nrow=size,ncol=3);#矩阵二叉树,NA值填充,第1列:左树 第2列:右树 第3列:值tree[1,3]<-root;#根节点的值写入return(list(tree_matrix=tree,tree_next=2,tree_size=size));#返回树,下一个节点编号,树的大小}insertTree<-function(node,tree,value)#node:根节点  tree:树  value:插入值{#判断插入的左右树位置left_right<-ifelse(value<=tree$tree_matrix[node,3],1,2);#判断root节点的左右树是否为空if(is.na(tree$tree_matrix[node,left_right])){#矩阵不够用了,加点儿if(tree$tree_next==nrow(tree$tree_matrix)+1){tree$tree_matrix<-rbind(tree$tree_matrix,matrix(rep(NA,tree$tree_size*3),nrow=tree$tree_size,ncol=3));}#插入树tree$tree_matrix[node,left_right]<-tree$tree_next;#修改根节点的左右树记录tree$tree_matrix[tree$tree_next,3]<-value;#修改子树的值tree$tree_next<-tree$tree_next+1;#下一树的序号递增return(tree);#返回树}else tr<-insertTree(tree$tree_matrix[node,left_right],tree,value) #在子树上递归}printTree<-function(node,tree){#左子树left<-tree$tree_matrix[node,1];if(!is.na(left))#左子树非空{printTree(left,tree);#递归打印}cat(tree$tree_matrix[node,3],"\n");#右子树right<-tree$tree_matrix[node,2];if(!is.na(right))#左子树非空{printTree(right,tree);}}






0 0
原创粉丝点击