随笔分类 - 树
摘要:题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。10/ \6 14/ \ / \4 8 12 16转换成双向链表4=6=8=10=12=14=16。首先我们定义的二元查找树节点的数据结构如下:struct BSTreeNode{int m_nValue; // value of nodeBSTreeNode *m_pLeft; // left child of nodeBSTreeNode *m_pRight; // right child of node};思想:1.构造二叉查找树;2.中序遍历二叉查找树,因此结点按从小到大顺序访
阅读全文
摘要:二叉排序树(Binary Sort Tree)又称二叉查找树或二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树。通俗地讲很简单:一句话就是左孩子比父节点小,右孩子比父节点大,还有一个特性就是”中序遍历“可以让结点有序。如下图:几种常见的操作:1、二叉树数据结构struct BSTNode{ int data; // value of node BSTNode *lchild; // left ch...
阅读全文
摘要:递归实现:int CountNode(BiTree T) { if(T == NULL) return 0; return 1 + CountNode(T -> lchild) + CountNode(T -> rchild); }
阅读全文
摘要:分析问题:若一颗二叉树为空,其深度为0,否则,利用其深度等于max{左子树depth,右子树depth}+1,可递归实现:int depth(BiTree T) //树的深度 { if(!T) return 0; int d1 = depth(T -> lchild); int d2 = depth(T -> rchild); return (d1 > d2 ? d1 : d2) + 1; }
阅读全文
摘要:层次遍历用队列实现:方法一:int visit(BiTree T) { if(T) { printf("%c ",T->data); return 1; } else return 0; } void LeverTraverse(BiTree T) //方法一、非递归层次遍历二叉树 { queue <BiTree> Q; BiTree p; p = T; if(visit(p)==1) Q.push(p); whil...
阅读全文
摘要:如下图表示一颗二叉树,对它进行先序遍历操作,采用两种方法,递归和非递归操作。。遍历结果为:4526731。。1、递归操作:思想:若二叉树为空,返回。否则1)后序遍历右子树;2)后序遍历左子树;3)遍历根节点代码:void PostOrder(BiTree root) { if(root==NULL) return ; PostOrder(root->lchild); //递归调用,后序遍历左子树 PostOrder(root->rchild); //递归调用,后序遍历右子树 printf("%c ", root->...
阅读全文
摘要:如下图表示一颗二叉树,对它进行先序遍历操作,采用两种方法,递归和非递归操作。。遍历结果为:4251637。。1、递归操作:思想:若二叉树为空,返回。否则1)中序遍历左子树;2)访问根节点;3)中序遍历右子树代码:void InOrder(BiTree root) { if(root==NULL) return ; InOrder(root->lchild); //递归调用,中序遍历左子树 printf("%c ", root->data); //输出数据 InOrder(root->rchild); //递归调用,中序遍历右子树 }...
阅读全文
摘要:如下图表示一颗二叉树,对它进行先序遍历操作,采用两种方法,递归和非递归操作。。遍历结果为:1245367。1、递归操作:思想:若二叉树为空,返回。否则1)遍历根节点;2)先序遍历左子树;3)先序遍历右子树代码:void PreOrder(BiTree root) { if(root==NULL) return ; printf("%c ", root->data); //输出数据 PreOrder(root->lchild); //递归调用,先序遍历左子树 PreOrder(root->rchild); //递归调用,先序遍历右子树 ...
阅读全文
摘要:二叉树数据结构:typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;假设要建立一颗如下的二叉树,输入为:124##5##36##7##我们采用两种方法递归和非递归1、二叉树的先序递归建立过程(递归就是调用栈进行的操作)直接上代码:void CreateBiTree(BiTree &root) { char ch; //要插入的数据 cin>>ch; if(ch=='#') root = NULL; else ...
阅读全文