Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/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_Language Agnostic_Tree_Binary Tree - Fatal编程技术网

Data structures 二叉树的顺序

Data structures 二叉树的顺序,data-structures,language-agnostic,tree,binary-tree,Data Structures,Language Agnostic,Tree,Binary Tree,我正在编写一个代码,用于查找二叉树(而不是二叉搜索树)的顺序继承者。这只是一个练习问题。更喜欢学习树的概念 我正在进行顺序遍历,并跟踪上一个节点。只要前一个节点与我们正在搜索的后续节点相等,我就打印当前节点 void inOrder(node* root , node* successorFor) { static node* prev = null; if(!root) return; inOrder(root->left,successorFor); if(p

我正在编写一个代码,用于查找二叉树(而不是二叉搜索树)的顺序继承者。这只是一个练习问题。更喜欢学习树的概念

我正在进行顺序遍历,并跟踪上一个节点。只要前一个节点与我们正在搜索的后续节点相等,我就打印当前节点

void inOrder(node* root , node* successorFor) {
  static node* prev = null;
  if(!root)
     return;
  inOrder(root->left,successorFor);
  if(prev == successorFor )
     print(root);
  prev = root;
  inOrder(root->right,successorFor);
}

我在寻找一些解决方案可能失败的测试用例?我的方法是否正确?如果不是,那么我该怎么做呢?

此算法的基本逻辑是树行走。 你可以像printTREE SUCCESSORroot,k.key那样调用


prev在哪里定义?我相信算法是正确的,但是打印successorFor有意义吗?或者你真的要打印root?@DavidB Done。这是一个静态变量。@Marcus是的,只是一个输入错误,它只是根变量。我会编辑。这是C++还是java?这不是全部三个。它只是一个二叉树,我需要找到一个节点的下一个顺序后继节点,也就是说,在给定节点之后的树遍历过程中,我将得到的下一个节点。这个算法不假设后继节点的任何位置,这就是为什么对左子节点和右子节点进行递归调用的原因。
TREE-SUCCESSOR(root, k)
    if root == NIL
        return NIL
    left = TREE-SUCCESSOR(root.left, k)
    right = TREE-SUCCESSOR(root.right, k)
    successor = NIL
    if root.key > k
        successor = root
    if left
        if k < left.key
            if successor
                if left.key < successor.key
                    successor = left
            else
                successor = left
    if right
        if k < right.key
            if successor
                if right.key < successor.key
                    successor = right
            else
                successor = right
    return successor