树
Jasablanca
这个作者很懒,什么都没留下…
展开
-
LeetCode(100):相同的树
注意,LeetCode上的树,都是先序建立。参考:https://support.leetcode-cn.com/hc/kb/article/1194353/提交代码:bool isSameTree(struct TreeNode* p, struct TreeNode* q){ //while(p!=NULL&&q!=NULL)//为什么要用while呢...原创 2019-05-19 10:58:13 · 115 阅读 · 0 评论 -
王道课后习题4.3.6:根据先序中序序列(一维数组)构建二叉树
设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1……n]和B[1……n]中,编写算法建立该二叉树的二叉链表TNode* PreInCreate(char S1[],char S2[],int l1,int r1,int l2,int r2){ //初始时,l1=l2=1,r1=r2=n int i,l_len,r_len; TNo...原创 2019-09-30 21:47:11 · 489 阅读 · 0 评论 -
王道课后习题4.3.7:判断二叉树是否为完全二叉树
采用层次遍历的算法,将所有结点加入队列(包括空结点)。当遇到空结点时,查看其后是否有非空结点。若有,则二叉树不是完全二叉树。bool Judge_Complete_1(TNode* p){ Queue Q; InitQueue(Q); if(p==NULL) return true; EnQueue(Q,p); while(QueueEm...原创 2019-10-01 11:38:00 · 328 阅读 · 1 评论 -
王道课后习题4.3.8:求二叉树所有双分支结点个数
int Double_Branch(TNode* p){ Queue Q; InitQueue(Q); EnQueue(Q,p); int k=0; while(QueueEmpty(Q)!=true) { DeQueue(Q,p); bool l_flag,r_flag; l_flag=r_flag...原创 2019-10-01 17:24:35 · 896 阅读 · 0 评论 -
王道课后习题4.3.9:交换二叉树左右子树
void exchange(TNode* p){ if(p!=NULL) { exchange(p->lchild); exchange(p->rchild); TNode* temp=p->lchild; p->lchild=p->rchild; p->rchil...原创 2019-10-01 17:33:19 · 286 阅读 · 2 评论 -
王道课后习题4.3.11:对于树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间
void del_x(TNode* p){ if(p!=NULL) { del_x(p->lchild); del_x(p->rchild); free(p);//最后释放根 }}int del_x_Q(TNode* p,char x){ Queue Q; InitQueue(Q); ...原创 2019-10-02 11:29:36 · 614 阅读 · 0 评论 -
王道课后习题4.3.13:查找p和q的最近公共祖先结点r
TNode* Parent_Common(TNode* root,char p,char q){ Stack S1; Stack S2; InitStack(S1); InitStack(S2); TNode* b1=root; TNode* b2=root;//不可以用同一个b,因为第一个while循环里b会改变。 TNode* r=NU...原创 2019-10-03 16:28:46 · 1809 阅读 · 7 评论 -
王道课后习题4.3.14:求非空二叉树b的宽度
void level_breath(TNode* T){ Queue Q; InitQueue(Q); TNode* p=T; int level=0; int last=1; int a[MaxSize]; for(int i=0;i<MaxSize;i++) { a[i]=0; } if(T...原创 2019-10-03 17:07:27 · 689 阅读 · 1 评论 -
王道课后习题4.3.16:将叶结点按从左到右的顺序连成单链表,表头指针为head,链接时用叶结点的右指针域存放单链表指针
TNode *head=NULL;TNode *r=NULL;TNode* inorder_L(TNode* p){ if(p!=NULL) { inorder_L(p->lchild); if(p->lchild==NULL&&p->rchild==NULL) { if...原创 2019-10-03 21:45:42 · 500 阅读 · 0 评论 -
王道课后习题4.3.5:非递归算法求二叉树的高度
算法思想:A:front=rear=0,last=1A出队后[B(1),C(2)],front=1=last,level++,last更新为2等front再次等于last的时候,第二层的结点就遍历完了,level再次++void THeigh(TNode* p){ Queue Q; InitQueue(Q); int last=1; //这里王道写的是l...原创 2019-09-30 20:48:54 · 556 阅读 · 0 评论 -
王道课后习题4.3.4:二叉树的自下而上,从右到左的层次遍历算法
void level_reverse(TNode* p){ Queue Q; Stack S; InitQueue(Q); InitStack(S); if(p!=NULL) { EnQueue(Q,p); while(!QueueEmpty(Q)) { DeQueue(Q,p...原创 2019-09-30 20:16:46 · 873 阅读 · 0 评论 -
王道课后习题4.3.3:编写后序遍历二叉树的非递归算法
后序:void postorder_1(TNode* bt){ Stack S; InitStack(S); TNode* p=bt; TNode* r=NULL; while(!StackEmpty(S)||p!=NULL) { while(p!=NULL) { Push(S,p); ...原创 2019-09-30 20:15:01 · 1415 阅读 · 1 评论 -
二叉树的建立(C语言)
首先是树结点的结构struct TreeNode{ int val; struct TreeNode *left; struct TreeNode *right;};typedef struct TreeNode TNode;typedef struct TreeNode *T_Pointer;这没什么说的。建树的代码:void Build_Tree(T_...原创 2019-05-18 16:05:21 · 12305 阅读 · 4 评论 -
树的遍历(C语言)
#include <stdio.h>#include <algorithm>struct TreeNode{ int val; struct TreeNode *left; struct TreeNode *right;};typedef struct TreeNode TNode;typedef struct TreeNode *T_...原创 2019-05-18 16:18:04 · 1339 阅读 · 0 评论 -
二叉树的建立
最终代码:#include <stdio.h>#include <malloc.h>typedef struct TNode{ char data; TNode* lchild; TNode* rchild;}TNode;void BuildTree(TNode* &T)//先序递归建立二叉树{ char ch; ...原创 2019-08-30 10:36:59 · 130 阅读 · 0 评论 -
王道课后习题4.2.5:顺序存储结构的二叉树寻找编号分别为i和j的两个结点的最近的公共祖先结点的值
题目描述:已知一棵二叉树按顺序存储结构进行存储,设计一个算法,求编号分别为i和j的两个结点的最近的公共祖先结点的值算法思想:从1开始编号。核心代码:#include <stdio.h>#include <malloc.h>#define MaxSize 13typedef struct TNode{ char data; TNod...原创 2019-08-30 11:10:57 · 5694 阅读 · 0 评论 -
二叉树的先序、中序、后序、递归遍历
void PreOrder(TNode* &T){ if(T!=NULL) { visit(T); PreOrder(T->lchild); PreOrder(T->rchild); }}void InOrder(TNode* &T){ if(T!=NULL) { ...原创 2019-08-30 11:17:21 · 200 阅读 · 1 评论 -
二叉树的先序、中序、后序非递归遍历
先序遍历非递归:void PreOrder_NonRecursion(TNode* &T){ Stack S; InitStack(S); if(T!=NULL) { Push(S,T); } while(StackEmpty(S)!=true) { Pop(S,T); visit(...原创 2019-08-30 20:43:06 · 459 阅读 · 1 评论 -
二叉树的层次遍历
void LevelOrder(TNode* &T){ Queue Q; InitQueue(Q); EnQueue(Q,T); while(QueueEmpty(Q)!=true) { DeQueue(Q,T); visit(T); if(T->lchild!=NULL) ...原创 2019-08-30 21:15:16 · 163 阅读 · 0 评论 -
二叉树深度
int Tree_Depth(TNode* &T){ if(T==NULL) return 0; int hl=Tree_Depth(T->lchild); int hr=Tree_Depth(T->rchild); return hl>hr?hl+1:hr+1;}这样写比较好理解,先递归左子树,再递归右子树,返回两...原创 2019-09-04 20:45:27 · 127 阅读 · 0 评论 -
王道课后习题4.3.16:试设计判断两棵二叉树是否相似的算法。相似指的是T1和T2都是空的二叉树或都只有一个根结点;或T1的左子树和T2的左子树是相似的且T1的右子树和T2的右子树是相似的
bool Similar(TNode *p1,TNode *p2){ if(p1==NULL&&p2==NULL) return true; else if(p1==NULL||p2==NULL) return false; else { bool l=Similar(p1->lchild,p2...原创 2019-10-03 21:47:08 · 748 阅读 · 0 评论