校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > UI专业知识 > 色彩
题目

已知二叉树Node定义如下, 现在需要设计一个方法交换左子树和右子树, 下列方法中, 可以实现交换的是? ()

class Node {
public:
Node* left;
Node* right;
char content;
Node(char content);
private:
Node(const Node&);
Node& operator=(const Node& node);
};

A.void swap(Node root) {Node* temp=root.left;root.left=root.right;root.right=temp;}

B.void swap(Node& left, Node& right) {Node temp=left; left=right;right=temp;}

C.void swap(Node* left, Node* right) {Node* temp=left; left=right;right=temp;}

D.void swap(Node*& left, Node*& right) {Node* temp=left; left=right;right=temp;}


解答

参考答案:D.

要交换二叉树的左右子树的方法可以有两种方法:
第一种是传递的参数根结点,选项A就是这种方法,不过根结点的类型应该是Node * ,即需更正为void swap(Node *root) {Node* temp=root->left;root->left=root->right;root->right=temp;},否则修改的只是实参的副本,并不能真正修改实参。不懂的话去看一下参数传递的三种方式(值传递,指针传递,引用传递),这里的D选项就是值传递,值传递的只是实参的一个副本,函数对参数的修改只是体现在实参的副本上并不会体现在实参上。A选项中参数类型错误
第二种是直接传递左右子树,二叉树的左右孩子都是指针类型,要修改指针类型的变量应该用指针的指针(**)或者指针的引用(*&)类型,BC的参数类型错误,所以只有D选项是正确的

C 2条回复 评论
麦兜兜麦

怎么没能早点看到你这篇文章呢

发表于 2023-09-07 22:00:00
0 0
哒哒哒哒哒

这是我一直没记住的一个重点

发表于 2023-08-08 22:00:00
0 0