您的位置:首页 > Web前端 > Node.js

Path Sum and Delete Node in a Linked List

2017-04-08 15:51 274 查看
今天照例更新数据结构基础,希望各位各取所需,我本人是习惯通过题目通过code来加深对数据结构以及某些算法的理解。

现在首先我们还是来看看二叉树相关的题目:

Path sum,leetcode上给出的演示如下:

For example:

Given the below binary tree and sum = 22,

5
/ \
4   8
/   / \
11  13  4
/  \      \
7    2      1


return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

题目判定,能否在某二叉树root中找到 各节点和为sum的路径。

首先老规矩分两种方法,DFS和BFS(注意因为要用到队列,故而BFS 是通过C++来实现的)。

首先我们看,通过BFS我们一层一层就遍历

算法分析:准备两个队列,一个为node,保存节点,一个为value,保存当前节点与之前节点的之和的值,下面看代码:

public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root == NULL)  return false;
queue<TreeNode*>     node;
queue<int>         value;
node.push(root);
value.push(root->val);
// 开启遍历
while(node.size() > 0) {
TreeNode*   cur = node.front();
node.pop();
int sumvalue = value.front;
if(cur->left == NULL && cur->right == NULL &&         sumvalue == sum){
return true;
}
if(cur->left !=NULL){
node.push(cur->left);
value.push(sumvalue + cur->left->val);
}

if(cur->right !=NULL) {
node.push(cur->right);
vaule.push(sumvalue + cur->right->val);
}

}
return false;
}


好了BSF方法已经完成,比较直接不需要太多思维,接下来看看DFS

DFS显得简洁很多,直接利用递归。

public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root == NULL)  return false;
if(root->left == NULL && root->right == NULL
&& root->val == sum)
return true;
// 开启递归
return  hasPathSum(root->left, sum- root->val)
||hasPathSum(root->right, sum - root->val);
}


再看链表相关的:

Delete Node in a Linked List

感觉这个题目没什么好讲的直接看代码:

void deleteNode(struct ListNode* node) {
node->val = node->next->val;

struct ListNode*  tmp = node->next;
node->next = tmp->next;

free(tmp);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: