70. 二叉搜索树的第k个结点 --中序遍历

实际上是中序遍历,每次遍历到一个节点,k--。直到k==0,就找到了第k个数。

 

二叉树基本操作:前序、中序、后序遍历(递归方式)

递归中序遍历函数模板

void inorder(tree_pointer ptr)
{
    if (ptr) {
        inorder(ptr->left_child);
        printf("\t%d", ptr->data);
        inorder(ptr->right_child);
    }
}

 

递归算法总结

class Solution {
public:
    
    TreeNode *ans;
    
    TreeNode* kthNode(TreeNode* root, int k) {
        cout<<"主函数"<<" "<<"root="<<root->val<<endl;
        dfs(root,k);
       // cout<<"主函数"<<" "<<"root="<<root->val<<endl;
        return ans;
    }
    
    void dfs(TreeNode* root, int &k)
    {
        cout<<"递归"<<endl;
        if(!root) {
            cout<<"满足if(!root)"<<endl;
            return;
        }
        cout<<"root="<<root->val<<endl;
        dfs(root->left, k);
        cout<<"k="<<k<<" "<<endl;
        k--;
        cout<<"执行k--后,k值="<<k<<" "<<endl;
        if(!k){
            ans =root;
            cout<<"满足if(!k)"<<endl;
        }
        if(k > 0) {
            cout<< "满足if(k>0)"<<endl;
            dfs(root->right,k);
        }
    }
};

 

 

 

 

测试结果

 

 输出

主函数 root=2
递归
root=2
递归
root=1
递归
满足if(!root)
k=3
执行k--后,k值=2
满足if(k>0)
递归
满足if(!root)
k=2
执行k--后,k值=1
满足if(k>0)
递归
root=3
递归
满足if(!root)
k=1
执行k--后,k值=0
满足if(!k)
3

 

posted @ 2020-02-20 10:27  靖愁  阅读(308)  评论(0编辑  收藏  举报