中序非递归遍历线索二叉树的C语言代码
时间: 2023-06-08 18:04:27 浏览: 64
以下是中序非递归遍历线索二叉树的C语言代码:
```c
void InOrderTraversal(ThreadTree T)
{
ThreadNode* p = T->lchild; // p指向根节点
while (p != T) { // 如果p指向根节点,则表示遍历完毕
while (p->ltag == Link) { // 如果p有左子树,则一直向左走
p = p->lchild;
}
printf("%c ", p->data); // 访问p的数据
while (p->rtag == Thread && p->rchild != T) { // 如果p的右指针是线索,则一直向右走
p = p->rchild;
printf("%c ", p->data); // 访问p的数据
}
p = p->rchild; // 如果p的右指针是指向孩子,则向右走到下一棵子树的根节点
}
}
```
注意:此处提供的代码为技术交流使用,仅供参考。任何对于这些代码的直接或间接使用及由此导致的后果,均由使用者自行承担责任。
相关问题
中序非递归遍历二叉树
以下是中序非递归遍历二叉树的Python实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def inorderTraversal(root: TreeNode) -> List[int]:
res = []
stack = []
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack.pop()
res.append(root.val)
root = root.right
return res
```
该算法使用了一个栈来模拟递归过程,具体实现如下:
1. 初始化一个空列表res和一个空栈stack。
2. 当根节点root不为空或者栈stack不为空时,执行以下操作:
1. 当root不为空时,将root入栈,并将root更新为root的左子节点。
2. 当root为空时,从栈中弹出一个节点,并将该节点的值加入到res中,然后将root更新为该节点的右子节点。
3. 当栈为空时,遍历结束,返回res。
中序非递归遍历二叉树流程图
以下是中序非递归遍历二叉树的流程图:
![中序非递归遍历二叉树流程图](https://img-blog.csdn.net/20161015174204717)
具体过程如下:
1. 初始化:将当前节点指向根节点,将栈清空。
2. 如果当前节点不为空,则将当前节点入栈,并将当前节点指向它的左子节点。
3. 如果当前节点为空,则从栈中弹出一个节点,访问该节点,并将当前节点指向该节点的右子节点。
4. 重复步骤2和步骤3,直到当前节点为空且栈为空。