首页 > 其他 > 详细

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

时间:2020-02-20 12:27:06      阅读:37      评论:0      收藏:0      [点我收藏+]

技术分享图片

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

 

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

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

原文:https://www.cnblogs.com/make-big-money/p/12334618.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!