摘要: 思路: 嘻嘻,请读者自己手动模拟。博主这里不知道怎么说。 拓展: 该算法思路也适用于 (1)每层的结点个数 (2)树的最大宽度 (3)节点位于某一层 int height(BiTree T){ if(T==null) return 0; int front= 1, rear= 1;//front 出 阅读全文
posted @ 2018-07-23 15:27 Loading~ 阅读(3179) 评论(0) 推荐(0) 编辑
摘要: 思路: 标记一个结点的左右子树是否已经被访问过,叶子节点也进行标记 拓展: 遍历过程中读者会发现,某一时刻,从栈底到栈顶的元素刚好构成当前访问节点的到根节点的路径。利用这一特性可以实现两个算法:(1)根到某节点的路径(2)两个节点的最近公共祖先 typeDef struct{ BiTree t; i 阅读全文
posted @ 2018-07-23 15:11 Loading~ 阅读(953) 评论(0) 推荐(1) 编辑
摘要: 思路:实际上是在先序遍历二叉树。递归一次,说明深入了一层。所以,在每次进入递归之时该层节点数++。 int count[MaxSize];//全局数组 int max = 1;全局变量 void width(BitNode T, int k){ if(T==null) return; count[k 阅读全文
posted @ 2018-07-23 14:58 Loading~ 阅读(6463) 评论(0) 推荐(0) 编辑
摘要: void swap(BitTree b){ if(b){ swap(b lchild);//递归交换结点左孩子的左右子树。。。 swap(b rchild);//递归交换结点右孩子的左右子树。。 temp = b lchild;//交换左右子树 b lchild = b rchild; b rchi 阅读全文
posted @ 2018-07-23 11:01 Loading~ 阅读(9710) 评论(0) 推荐(1) 编辑
摘要: int height(BitNode t){ if(t==null) return 0; else return 1+Max{height(t lchild),height(t rchild)}; } 您可能感兴趣的 非递归先序遍历二叉树 "https://www.cnblogs.com/Coeus 阅读全文
posted @ 2018-07-23 10:57 Loading~ 阅读(2505) 评论(0) 推荐(0) 编辑
摘要: int Degree0(BitNode t){ if(t==null) return 0; if(t lchild==null&&t rchild==null) return 1; return Degree0(t lchild)+Degree0(t rchild); } 您可能感兴趣的 非递归先序 阅读全文
posted @ 2018-07-23 10:54 Loading~ 阅读(2514) 评论(0) 推荐(0) 编辑
摘要: int Degree2(BitNode t){ if(t==null) return 0; if(t lchild!=null&&t rchild!=null) return 1+Degree2(t lchild)+Degree2(t rchild); return Degree2(t lchild 阅读全文
posted @ 2018-07-23 10:53 Loading~ 阅读(2424) 评论(0) 推荐(0) 编辑
摘要: int Degree1(BitNode t){ if(t==null) return 0; if(t lchild==null&&t rchild!=null||t rchild==null&&t lchild!=null) return 1+Degree1(t lchild)+Degree1(t 阅读全文
posted @ 2018-07-23 10:51 Loading~ 阅读(3167) 评论(0) 推荐(0) 编辑
摘要: 如题: Pn(x) n=0的情况下为0 n=1的情况下为2x n 1的情况下为2xPn 1(x) 2(n 1)Pn 2(x) 思路:博主想了半天不知道咋说,但是这是一种递归思想。还请读者好好体会 func(Tree T){ //本程序需要的数据结构 struct Stack{ int n; int 阅读全文
posted @ 2018-07-23 10:46 Loading~ 阅读(865) 评论(0) 推荐(0) 编辑
摘要: 如果第一遍看不懂不要紧,请手动模拟体会。这个方法是设置最近访问节点,另解参考博主博文版本二 func(Tree T){ if(T==NULL){ printf("树空"); return } Stact S; TreeNode r=NULL;//用于标记是否是从右子树返回的,读者手动模拟一遍就知道了 阅读全文
posted @ 2018-07-23 10:32 Loading~ 阅读(469) 评论(0) 推荐(0) 编辑
摘要: 请读者对比学习本博客非递归先序遍历二叉树 "https://www.cnblogs.com/Coeus P/p/9353186.html" func(Tree T){ if(T==NULL){ printf("树空"); return } Queue q; EnQueue(q,T); while(! 阅读全文
posted @ 2018-07-23 10:19 Loading~ 阅读(696) 评论(0) 推荐(0) 编辑
摘要: 读者手动模拟时需注意叶子节点的左右子树进入循环的情况 func(Tree T){ if(T==NULL){ printf("树空"); return; } Stack S; while(T!=NULL||!IsEmpty(S)){ if(T){ push(S,T); T=T lchild; } el 阅读全文
posted @ 2018-07-23 10:12 Loading~ 阅读(415) 评论(0) 推荐(1) 编辑
摘要: func(Tree T){ if(T==NULL){ printf("树空"); return; } Stack S; push(S,T); while(!IsEmpty(S)){ pop(S,T); visit(T); if(T rchild) push(S,T rchild); if(T lch 阅读全文
posted @ 2018-07-23 10:05 Loading~ 阅读(641) 评论(0) 推荐(1) 编辑