Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures 如何对线程二叉搜索树进行前序和后序遍历?_Data Structures_Tree_Traversal - Fatal编程技术网

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