Data structures 如何对线程二叉搜索树进行前序和后序遍历?
好的,所以使用线程遍历线程二叉树的顺序如下:Data structures 如何对线程二叉搜索树进行前序和后序遍历?,data-structures,tree,traversal,Data Structures,Tree,Traversal,好的,所以使用线程遍历线程二叉树的顺序如下: 从最左边的节点开始打印 跟随线程到右边并打印它 按照链接向右转到最左边的节点并打印它 跟随线程到右边并打印它 (重复) 但是如何使用线程进行预序和后序遍历呢?线程树节点通常有一个标志,告诉您节点中的右和左指针是对子节点的引用,还是对顺序/预序后续节点的线程的引用。这是判断节点是否为叶的唯一方法 线程树的好处在于,无需递归即可快速完成顺序遍历或反向顺序遍历。但是线程树不能帮助您进行后序或前序遍历。如果你想做其中一个,你必须使用递归算法,把线程考虑在内。
但是如何使用线程进行预序和后序遍历呢?线程树节点通常有一个标志,告诉您节点中的
右和左指针是对子节点的引用,还是对顺序/预序后续节点的线程的引用。这是判断节点是否为叶的唯一方法
线程树的好处在于,无需递归即可快速完成顺序遍历或反向顺序遍历。但是线程树不能帮助您进行后序或前序遍历。如果你想做其中一个,你必须使用递归算法,把线程考虑在内。例如:
preorder(node)
print node
if (node.left is not a thread link)
preorder(node.left)
if (node.right is not a thread link)
preorder(node.right)
postorder(node)
if (node.left is not a thread link)
preorder(node.left)
if (node.right is not a thread link)
preorder(node.right)
print node
线程树节点通常有一个标志,告诉您节点中的右
和左
指针是对子节点的引用,还是对inorder/preorder后续节点的线程的引用。这是判断节点是否为叶的唯一方法
线程树的好处在于,无需递归即可快速完成顺序遍历或反向顺序遍历。但是线程树不能帮助您进行后序或前序遍历。如果你想做其中一个,你必须使用递归算法,把线程考虑在内。例如:
preorder(node)
print node
if (node.left is not a thread link)
preorder(node.left)
if (node.right is not a thread link)
preorder(node.right)
postorder(node)
if (node.left is not a thread link)
preorder(node.left)
if (node.right is not a thread link)
preorder(node.right)
print node