使用栈生成二叉树
可以使用先序遍历的方式生成二叉树:
- 创建一个空栈,将根节点压入栈中。
- 读取下一个节点,如果它是空节点,则弹出栈顶元素,重复该步骤直到读取到非空节点。
- 将该节点作为栈顶元素的左子节点,并将其压入栈中。
- 读取下一个节点,如果它是空节点,则弹出栈顶元素,重复该步骤直到读取到非空节点。
- 将该节点作为栈顶元素的右子节点,并将其压入栈中。
- 重复步骤2-5,直到所有节点都被处理完毕。
- 返回根节点。
例如,给定先序遍历序列[1,2,4,5,3,6,7],可以按照上述步骤生成二叉树:
- 将1压入栈中。
- 读取2,将其作为1的左子节点,并将其压入栈中。
- 读取4,将其作为2的左子节点,并将其压入栈中。
- 读取5,将其作为4的右子节点,并将其压入栈中。
- 读取空节点,弹出栈顶元素5,重复该步骤直到读取到非空节点。
- 将空节点作为2的右子节点,并将其压入栈中。
- 读取空节点,弹出栈顶元素2,重复该步骤直到读取到非空节点。
- 将3作为1的右子节点,并将其压入栈中。
- 读取6,将其作为3的左子节点,并将其压入栈中。
- 读取7,将其作为6的右子节点,并将其压入栈中。
- 读取空节点,弹出栈顶元素7,重复该步骤直到读取到非空节点。
- 将空节点作为6的左子节点,并将其压入栈中。
- 读取空节点,弹出栈顶元素3,重复该步骤直到读取到非空节点。
- 完成。
最终生成的二叉树如下所示:
1
/ \
2 3
/ \ / \
4 N 6 7
/ \
N N
``
原文地址: https://www.cveoy.top/t/topic/ffmh 著作权归作者所有。请勿转载和采集!