zoukankan      html  css  js  c++  java
  • [剑指Offer]54-二叉搜索树的第k个节点

    题目描述

    给定一棵二叉搜索树,找出其中的第k小的结点,返回指向该节点的指针。

    思路

    中序遍历即可。
    注意特判!报段错误数组越界这里就要考虑是少特判的问题。

    法一:借助vector
    法二(better)(学习的牛客网最佳解法):到第k个直接返回。
    关键是理解:

    if (pNode != nullptr) {
    	return pNode;
    }
    

    有了这句话,当遍历到第k小的节点时,返回该节点指针,并会一路传出来。没有的话,则只是传给上层父节点,后续会被覆盖。
    当未到第k个时,(node接收的)返回值一直是空。到第k个后,一旦返回了root,那么node就不会为空了,就一直一层层的递归出去到结束了。

    代码

    法一:

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    
    class Solution {
    public:
    	TreeNode* KthNode(TreeNode* pRoot, int k)
    	{
    		if (pRoot == NULL || k <= 0) {//注意k=0
    			return NULL;
    		}
    		vector<TreeNode*> vec;
    		inorderTravel(pRoot,vec);
    		if((size_t) k>vec.size()) {//注意
    			return NULL;
    		}
    		return vec[k - 1];
    	}
    
    private:
    	void inorderTravel(TreeNode* pRoot,vector<TreeNode*>& vec) {
    		if (pRoot == NULL) {
    			return;
    		}
    		else {
    			inorderTravel(pRoot->left,vec);
    			vec.push_back(pRoot);
    			inorderTravel(pRoot->right,vec);
    		}
    	}
    };
       
    

    法二:

    class Solution {
    public:
    	int cnt = 0;
    	TreeNode* KthNode(TreeNode* pRoot, int k)
    	{
    		if (pRoot != nullptr) {
    			TreeNode* pNode=KthNode(pRoot->left, k);
    			if (pNode != nullptr) {
    				return pNode;
    			}
    			cnt++;
    			if (cnt == k) {
    				return pRoot;
    			}
    			pNode = KthNode(pRoot->right, k);
    			if (pNode != nullptr) {
    				return pNode;
    			}
    		}
    		return nullptr;
    	}
    };
    
  • 相关阅读:
    大端小端与数字的二进制存储
    java基础之进制转换汇总
    (转) tcp udp通讯协议
    JAVA Tcp Udp的通讯实现(转)
    ExecutorService创建线程使用 转()
    转:java中的位运算
    SVN服务器的搭建与TortoiseSVN的使用
    [Mark]VM Cone & Template
    [Mark]VM migrate
    [Mark] ethtool command in REHL OS
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10460383.html
Copyright © 2011-2022 走看看