[数据结构]我在做树一章题目时的心得体会(不断更新中...)

1、后序非递归遍历二叉树时,访问到指定结点时栈中的元素为此结点的祖先。

2、k叉树第p个结点的第k-1个孩子的层次序列为p*k。

3、在树这章写递归时,出口判断常为树空或子树空。

4、树转成的二叉树无右子树。

5、树用孩子兄弟存储的结构中,结点若无firstchild,则该结点在树的结构中必是一个叶子。故用孩子兄弟链表示的树统计叶子的算法可以写为firstchild == NULL。

6、找子孙常用先序遍历,找祖先常用后序遍历。

7、在按层次访问一棵二叉树的基础上加以修改,不论其左右子树是否为空均入队,若为完全二叉树,则将它按层序输出时得到的是一个连续的不含空指针的序列,反之序列中会含有空指针。

8、递归中常用return向上级函数返回值。

9、对于递归单棵树,用NULL和非NULL做出口判断已经足够。对于建树的担心,用return向上级函数返回地址,并在非NULL状态下建好链就行了。而对于多棵树,则要对不同树的不同状态进行出口判断。

10、先序线索树结点的前驱:当结点无左子树时,是lchild指向的结点,否则要设一个pre指针指向节点的根,则pre指针指向的结点为当前结点的前驱。结点的后继:结点有左子树,则后继为其左子树,否则为其rchild指向的结点。

11、中序线索树结点的前驱:结点无左子树时,其lchild指向的结点即为它的前驱,否则为其左子树的最右下结点;后继:结点无右子树时其后继为其rchild指向的结点,否则其后继是它右子树最左结点。

12、后序线索树节点的前驱:若结点无左子树,则其lchild指向的结点是其前驱,否则若结点有右子树,其右孩子为其前驱,否则其左孩子为其前驱;后继:结点右子树为空时,其rchild指向的结点为其后继,否则需通过找结点的双亲,若该结点为双亲的左孩子且双亲有右子树,则结点的后继为其双亲右子树的最左结点,若其双亲无右子树,则结点后即为其双亲。若结点是其双亲的右孩子,其后继是其双亲。而线索二叉树结点中一般不含指向双亲的指针,由此可见,线索对后序线索树的后继无太多帮助。

13、对于给定序列建树,应用给定序列找出其根的位置,再找左右子树的上下界作为新树的全树上下界,不断缩小树,直至树空。

14、对于给定静态数组建链结构树,先建好根,然后用2*i和2*i+1的规律建其左右子树。

15、

不断更新中...

阅读更多
个人分类: 算法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭