用 C++ 打印二叉搜索树的所有奇数节点


在这个问题中,我们给定一棵二叉搜索树,我们需要打印所有具有奇数值的节点。

二叉搜索树是一种特殊的树,它具有以下属性:

  • 左子树的值始终小于根节点。

  • 右子树的值始终大于根节点。

  • 左右子树也应该遵循以上两个属性。

让我们举个例子来理解这个问题:

输出 - 1 3 9

为了解决这个问题,一个简单的方法是遍历树。在遍历过程中,我们将检查树中每个节点的值。如果节点为奇数,则打印它,否则移动到树的下一个节点。

程序的复杂度将取决于节点的数量。时间复杂度:O(n)。

示例

下面的程序展示了我们解决方案的实现:

实时演示

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int key;
   struct Node *left, *right;
};
Node* newNode(int item){
   Node* temp = new Node;
   temp->key = item;
   temp->left = temp->right = NULL;
   return temp;
}
Node* insertNode(Node* node, int key){
   if (node == NULL)
      return newNode(key);
   if (key < node->key)
      node->left = insertNode(node->left, key);
   else
      node->right = insertNode(node->right, key);
   return node;
}
void printOddNodes(Node* root){
   if (root != NULL) {
      printOddNodes(root->left);
      if (root->key % 2 != 0)
         cout<<root->key<<"\t";
      printOddNodes(root->right);
   }
}
int main(){
   Node* root = NULL;
   root = insertNode(root, 6);
   root = insertNode(root, 3);
   root = insertNode(root, 1);
   root = insertNode(root, 4);
   root = insertNode(root, 9);
   root = insertNode(root, 8);
   root = insertNode(root, 10);
   cout<<"Nodes with odd values are :\n";
   printOddNodes(root);
   return 0;
}

输出

具有奇数值的节点为:

1 3 9

更新于: 2020年1月22日

228 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.