live long and prosper
接着昨天的文章来讲,A(B(D(,G)),C(E,F))
从根结点到叶节点的每一条路,使用栈来存储上面的元素。
下面理一下代码执行的思路
遍历字符 | 操作 | 栈操作 |
A | 执行15行代码,将A作为根节点 | None |
( | 执行12行代码,栈底指针上移,让A进栈,预备创建左孩子链(k=1) | 将A进栈 |
B | 执行15行代码,不是根节点,再执行19行代码,有k=1创建左孩子节点 | A |
( | 执行12行代码,栈底指针上移,让B进栈,预备创建左孩子链(k=1) | AB |
D | 执行15行代码,不是根节点,再执行19行代码,有k=1创建左孩子节点 | AB |
( | 执行12行代码,栈底指针上移,让D进栈,预备创建左孩子链(k=1) | ABD |
, | 执行14行代码,预备创建有孩子链(k=2) | ABD |
G | 执行15行代码,不是根节点,再执行19行代码,有k=2创建右孩子节点 | ABD |
) | 执行13行代码,D出栈 | AB |
) | 执行13行代码,B出栈 | A |
, | 执行14行代码,预备创建有孩子链(k=2) | A |
C | 执行15行代码,不是根节点,再执行19行代码,有k=2创建右孩子节点 | A |
( | 执行12行代码,栈底指针上移,让C进栈,预备创建左孩子链(k=1) | AC |
E | 执行15行代码,不是根节点,再执行19行代码,有k=1创建左孩子节点 | AC |
, | 执行14行代码,预备创建有孩子链(k=2) | AC |
F | 执行15行代码,不是根节点,再执行19行代码,有k=2创建右孩子节点 | AC |
) | 退栈 | A |
) | 退栈 | None |