二叉树的逆时针螺旋遍历?

这里我们将看到一个有趣的问题。我们有一棵二叉树。我们必须以逆时针的方式遍历树。遍历的顺序如下所示 −

二叉树的逆时针螺旋遍历?

遍历序列是 1, 8, 9, 10, 11, 12, 13, 14, 15, 3, 2, 4, 5, 6, 7

算法

antiClockTraverse(root)

Begin   i := 1, j := height of the tree   flag := false   while i <= j, do      if flag is false, then         print tree elements from right to left for level i         flag := true         i := i + 1      else         print tree elements from left to right for level j         flag := false         j := j - 1      end if   doneEnd

示例

#includeusing namespace std;class Node {   public:      Node* left;      Node* right;      int data;   Node(int data) { //constructor to create node      this->data = data;      this->left = NULL;      this->right = NULL;   }};int getHeight(Node* root) {   if (root == NULL)   return 0;   //get height of left and right subtree   int hl = getHeight(root->left);   int hr = getHeight(root->right);   return 1 + max(hl, hr); //add 1 for root}void printLeftToRight(class Node* root, int level) {   if (root == NULL)      return;   if (level == 1)      cout <data < 1) {      printLeftToRight(root->left, level - 1);      printLeftToRight(root->right, level - 1);   }}void printRightToLeft(struct Node* root, int level) {   if (root == NULL)      return;   if (level == 1)      cout <data < 1) {      printRightToLeft(root->right, level - 1);      printRightToLeft(root->left, level - 1);   }}void antiClockTraverse(class Node* root) {   int i = 1;   int j = getHeight(root);   int flag = 0; //flag is used to change direction   while (i left = new Node(2);   root->right = new Node(3);   root->left->left = new Node(4);   root->left->right = new Node(5);   root->right->left = new Node(6);   root->right->right = new Node(7);   root->left->left->left = new Node(8);   root->left->left->right = new Node(9);   root->left->right->left = new Node(10);   root->left->right->right = new Node(11);   root->right->left->left = new Node(12);   root->right->left->right = new Node(13);   root->right->right->left = new Node(14);   root->right->right->right = new Node(15);   antiClockTraverse(root);}

输出

1 8 9 10 11 12 13 14 15 3 2 4 5 6 7

以上就是二叉树的逆时针螺旋遍历?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444073.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 20:58:36
下一篇 2025年12月14日 10:06:11

发表回复

登录后才能评论
关注微信